我只是在学习 Retrofit 和 OKHttp,现在我有一个问题。我的应用程序中的每个请求都是 POST,就像这样:
@FormUrlEncoded
@POST("some url")
Observable<Result> getData(@Field("id") String id);
在每个 POST 中,都有两个相同的参数。所以以最简单的方式,我可以在每个方法中再添加两个@Field,例如@Field("token"),@Field("account")。但我认为必须有一个聪明的方法。
然后我认为 OkHttpClient 可以解决这个问题。
OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
RequestBody body = new FormBody.Builder().add("account", "me")
.add("token", "123456").build();
request = request.newBuilder().post(body).build();
return chain.proceed(request);
}
}).build();
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("some base url")
.client(client)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.build();
或者
HttpUrl url = request.url().newBuilder()
.setEncodedQueryParameter("account", "me")
.setEncodedQueryParameter("token", "123456")
.build();
第一种方法只是将所有字段替换为这两个。
第二种方法只是将这两个添加为 GET 参数,而不是 POST。
现在我完全不知道如何使这项工作。