我试图转换目前使用Retrofit的应用程序,以使用RX Java。 为了处理分页,我传统上是从响应头中抓取nextPage URL。
@Override
public void success(Assignment assignment, Response response) {
response.getHeaders(); // Do stuff with header info
}
但是,由于切换到RX Java,我不知道如何从我的改装电话中获取响应信息。
@GET("/{item_id}/users")
Observable<List<Objects>> getObjects(@Path("object_id") long object_id);
@GET("/{next}")
Observable<List<Objects>> getNextPageObjects(@Path("next") String nextURL);
有没有办法让我的改装调用将我的标题信息与我的Typed对象一起返回?
答案 0 :(得分:3)
让我扰乱这一点。您可以截取 OkHttp-2.2 中的请求和响应。与OkHttp wiki上一样,拦截器不会在Retrofit
中与OkUrlFactory
一起使用。您需要提供Client
实施,以便custom Client直接Retrofit
OkHttp
次请求
不幸的是,它还没有(很快)。
public class ResponseHeaderInterceptor implements Interceptor {
public interface ResponseHeaderListener{
public void onHeadersIntercepted(Headers headers);
}
private ResponseHeaderListener mListener;
public ResponseHeaderInterceptor(){};
public ResponseHeaderInterceptor(ResponseHeaderListener listener){
mListener = listener;
}
@Override public Response intercept(Chain chain) throws IOException {
Response response = chain.proceed(chain.request());
if(mListener != null){
mListener.onHeadersIntercepted(response.headers());
}
return response;
}
用法:
ResponseHeaderListener headerListener = new ResponseHeaderListener(){
@Override
public void onHeadersIntercepted(Headers headers){
//do stuff with headers
}
};
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.interceptors().add(new ResponseHeaderInterceptor(headerListener));
RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder();
restAdapterBuilder.setClient(new OkHttpClient22(okHttpClient));
这是应用程序拦截器,只会被调用一次。
请注意我通过逻辑做了所有这些,我仍然没有OkHttp-2.2。请阅读它here。当2.2是最新的jar时,我会删除一些文本。
或者,您可以尝试创建自定义客户端,并使用一个界面提供响应:
public class InterceptableClient extends OkClient {
private ResponseListener mListener;
public interface ResponseListener{
public void onResponseIntercepted(Response response);
}
public InterceptableClient(){};
public InterceptableClient(ResponseListener listener){
mListener = listener;
}
@Override
public retrofit.client.Response execute(Request request) throws IOException {
Response response = super.execute(request);
if(mListener != null) //runs on the executor you have provided for http execution
mListener.onResponseIntercepted(response);
return response;
}
}
修改:OkHttp 2.2已经released。