3 回答
TA贡献2012条经验 获得超12个赞
如果您使用的是Retrofit > =,1.9.0则可以使用OkHttp的新Interceptor(已在中引入)OkHttp 2.2.0。您可能需要使用Application Interceptor,它允许您进行以下操作retry and make multiple calls。
您的拦截器可能类似于以下伪代码:
public class CustomInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
// try the request
Response response = chain.proceed(request);
if (response shows expired token) {
// get a new token (I use a synchronous Retrofit call)
// create a new request and modify it accordingly using the new token
Request newRequest = request.newBuilder()...build();
// retry the request
return chain.proceed(newRequest);
}
// otherwise just pass the original response on
return response;
}
}
定义完后Interceptor,创建一个OkHttpClient并将拦截器添加为应用程序拦截器。
OkHttpClient okHttpClient = new OkHttpClient();
okHttpClient.interceptors().add(new CustomInterceptor());
最后,OkHttpClient在创建时使用它RestAdapter。
RestService restService = new RestAdapter().Builder
...
.setClient(new OkClient(okHttpClient))
.create(RestService.class);
警告:由于Jesse Wilson(从广场)提到这里,这是权力的危险量。
话虽如此,我绝对认为这是现在处理此类问题的最佳方法。如果您有任何疑问,请随时在评论中提问。
- 3 回答
- 0 关注
- 592 浏览
添加回答
举报