从OkHttp v3开始,OkHttpClient是不可变的,拦截器的列表也是如此。
从Retrofit 2.0-beta3开始,它取决于OkHttp v3。
在我的应用中,我需要解析具有“a = 1& b = 2& c = 3”格式的Google Analytics Campain refferer密钥,并将其附加到注册请求网址。
使用以前版本的改造,通过添加
很容易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是一个选项,但它需要解析我试图避免的参数字符串。
答案 0 :(得分:0)
使用查询地图。
public interface ApiService {
@GET("YOUR_BASE_URL")
Call<Login> authenticate(@Query("a") String a, @Query("b") String b,@Query("c") String c);
}
答案 1 :(得分:0)
您可以安装拦截器一次,然后使用标头触发拦截器。有关详细信息,请参阅this post。
答案 2 :(得分:-1)
取决于您的请求方法,但在这里我使用GET
//您也可以使用地图查询来获得相同的结果
public interface ApiService {
@GET("api/{a}/{b}/{c}")
Call<Login> authenticate(@Path("a") String a, @Path("b") String password, @Path("c") String c);
}
创建EntityObject
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) {
}
});
}