通过动态路径

时间:2016-08-23 13:21:52

标签: android retrofit

我有两个API -

一个用于搜索与该电话号码相关联的人的 ID 的电话号码(比方说http://example.com/api/?phone=1234567890

另一个(http://example.com/api/con/ ID /)来获取联系人详细信息。

基本上,在第二次调用中,我必须包含第一次调用中返回的id。

我的问题是我该怎么做?

我在我的代码中来到这里,但除了我的情况,我找不到任何东西。

public interface RequestInterface {
    @GET("/con/")
    Call<JSONResponse> getJSON();
}

3 个答案:

答案 0 :(得分:1)

由于动态路径发生了变化,因此如果您尝试从本地服务器调用它,则需要使用以下规则创建.htaccess文件:

# Turn rewrite engine on
Options +FollowSymlinks
RewriteEngine on

# map neat URL to internal URL
RewriteRule ^api/con/([0-9]+)/?$ RestController.php?phone=single&id=$1 [NC,L,QSA]    
RewriteCond %{QUERY_STRING} (?:^|&)number=(\d+)$
RewriteRule ^api/?$ RestController.php?phone=all&no=%1 [NC,L]

这将根据查询参数和URL重定向您的服务器。

 public interface RequestInterface 
 {
   BASE_URL = "http://example.com" 
   @GET("/api")
   Call<YourFetchResponse> getPhoneDetails(@Query("api_key") String apiKey,@Query("phone") String phone);

   @GET("/api/con/{id}")
   Call<YourIdResponse> getIdDetails(@Query("api_key") String apiKey,@Path("id") String id);
}

<强> MainActivity.java

    Call<YourFetchResponse> call = RequestInterface.getPhoneDetails(API_KEY,PHONE);
    call.enqueue(new Callback<YourFetchResponse>()
    {
        @Override
        public void onResponse(Call<YourFetchResponse> call, Response<YourFetchResponse> response)
        {

        Call<YourIdResponse> call1 = RequestInterface.getIdDetails(API_KEY, response.body().getId);
        call1.enqueue(new Callback<YourIdResponse>()
        {
          @Override
          public void onResponse(Call<YourIdResponse> call,  Response<YourIdResponse> response)
           {....}       
          @Override
          public void onFailure(Call<YourFetchResponse> call, Throwable t)
          {....}

        }

        @Override
        public void onFailure(Call<YourFetchResponse> call, Throwable t)
        {....}
    });

答案 1 :(得分:0)

您需要使用@Path注释。

public interface RequestInterface {

    BASE_URL = "http://example.com/api/";

    @GET("con/{id}")
    Call<YourFetchResponse> contactFetch(@Path("id") String id);

    @GET("")
    Call<YourIdResponse> contactId(@Query("phone") String phone);

}

祝你好运。

答案 2 :(得分:0)

public interface RequestInterface {

 @GET("serviceURL")
Call<JSONResponse> getPhoneDetails(@Query("api_key") String apiKey);

 @GET("serviceURL")
Call<JSONResponse> getIdDetails(@Query("api_key") String apiKey);

}

onResponse of First service call second service。