1

从 OkHttp v3 开始 OkHttpClient 是不可变的,拦截器的列表也是如此。

从 Retrofit 2.0-beta3 开始,它依赖于 OkHttp v3。

在我的应用程序中,我需要解析具有“a=1&b=2&c=3”格式的 Google Analytics Campain 引用者密钥,并将其附加到注册请求 URL。

使用以前版本的改造很容易通过添加

retrofit.client().interceptors().add(0, chain -> {
    final Request httpRequest = chain.request();
    return chain.proceed(httpRequest.newBuilder().url(httpRequest.httpUrl().toString() + "&" + request.getUtmParams()).build());
});

在执行调用和

retrofit.client().interceptors().remove(0);

通话后进行。

无法弄清楚如何使用新版本实现相同的行为。请帮忙。

UPD 1.目标是控制单个请求的请求URL。将字符串附加到末尾只是一个示例。使用@QueryMap 是一个选项,但它需要解析我尽量避免的参数字符串。

4

3 回答 3

0

您可以安装拦截器一次,然后使用标头触发拦截器。有关详细信息,请参阅此帖子

于 2016-02-19T01:34:07.390 回答
-1

使用查询地图。

public interface ApiService {
@GET("YOUR_BASE_URL")
Call<Login> authenticate(@Query("a") String a, @Query("b") String b,@Query("c") String c);
}
于 2016-02-18T19:50:25.767 回答
-2

取决于您的请求方法,但在这里我使用的是 GET

// 您也可以使用 Map Query 来获得相同的结果

public interface ApiService {

    @GET("api/{a}/{b}/{c}")
    Call<Login> authenticate(@Path("a") String a, @Path("b") String password, @Path("c") String c);
}

创建一个实体对象

public EntityObject {

   Public String a;

   Public String b;

   Public String c;
}

使用改造根据您的参数提出您的要求

private void makeRemoteRequest(String a, String b, String c){

  Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

 ApiInterface mService = retrofit.create(ApiService.class);

Call<Login> mService = mService.authenticate(a, b, c);
    mService.enqueue(new Callback<Login>() {
        @Override
        public void onResponse(Call<Login> call, Response<Login> response) {


        }

        @Override
        public void onFailure(Call<Login> call, Throwable t) {

        }
    });
}
于 2016-02-18T18:23:15.617 回答