Android 改装-全球拦截响应
我想截取改装引擎接收到的所有响应,并扫描HTTP错误代码,例如错误403 我知道我可以使用每个请求的失败(错误)回调并检查403,但我想全局包装响应 我可以看到请求拦截是可能的,但我看不到类似的响应选项Android 改装-全球拦截响应,android,retrofit,okhttp,Android,Retrofit,Okhttp,我想截取改装引擎接收到的所有响应,并扫描HTTP错误代码,例如错误403 我知道我可以使用每个请求的失败(错误)回调并检查403,但我想全局包装响应 我可以看到请求拦截是可能的,但我看不到类似的响应选项 有什么建议吗?我可以通过向改造使用的OkHttpClient添加拦截器来实现这一点 Kotlin+改装2.x val clientBuilder = OkHttpClient.Builder() clientBuilder.addInterceptor { chain ->
有什么建议吗?我可以通过向改造使用的OkHttpClient添加拦截器来实现这一点 Kotlin+改装2.x
val clientBuilder = OkHttpClient.Builder()
clientBuilder.addInterceptor { chain ->
val request = chain.request()
val response = chain.proceed(request)
if (response.code() == 403) {
handleForbiddenResponse()
}
response
}
改装2.x:
OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder();
clientBuilder.
addInterceptor(new Interceptor() {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if (response.code() == 403) {
handleForbiddenResponse();
}
return response;
}
});
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(API_BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.client(clientBuilder.build();)
.build();
改装1.x:
public class ForbiddenInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Request request = chain.request();
Response response = chain.proceed(request);
if (response.code() == 403) {
handleForbiddenResponse();
}
return response;
}
}
OkHttpClient okHttpClient = Utils.createUnsafeOkHttpClient();
okHttpClient.interceptors().add(new ForbiddenInterceptor());
RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
.setEndpoint(API_BASE_URL)
.setClient(new OkClient(okHttpClient));
另一种可能是重写改装的
OkClient
中的execute
方法。在我的例子中,我正在寻找一个特定的响应头,所以它是这样的:
OkClient client = new OkClient(okHttpClient) {
@Override
public retrofit.client.Response execute(retrofit.client.Request request) throws IOException {
retrofit.client.Response response = super.execute(request);
// Do whatever with 'response', such as looking for the value of a particular header:
List<retrofit.client.Header> headers = response.getHeaders();
for (retrofit.client.Header header : headers) {
if (MY_HEADER.equalsIgnoreCase(header.getName())) {
this.savedValue = header.getValue();
break;
}
}
return response;
}
};
RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder()
.setEndpoint(API_BASE_URL)
.setClient(client);
OkClient客户端=新的OkClient(okHttpClient){
@凌驾
public reformation.client.Response execute(reformation.client.Request请求)引发IOException{
reformation.client.Response=super.execute(请求);
//对“响应”执行任何操作,例如查找特定标题的值:
List headers=response.getHeaders();
用于(改装.client.Header标题:标题){
if(MY_HEADER.equalsIgnoreCase(HEADER.getName())){
this.savedValue=header.getValue();
打破
}
}
返回响应;
}
};
RestAdapter.Builder restAdapterBuilder=新建RestAdapter.Builder()
.setEndpoint(API_BASE_URL)
.setClient(客户);
正如您在上面的代码片段中所看到的,
okhttp3.Response=chain.continue(请求)代码>行访问服务器响应。因此,我们可以使用if(response.code()==500)
检查状态代码,然后打开ServerisBrokerActivity
你能解释一下我应该为ActivityFragmentInteraction支持什么吗我想知道doStuff()可能会做什么,因为这是一个后台线程。什么是restadapter这是改装1.x,我将更新改装2的答案:)有没有办法调用改装API调用程序的onFailure()?[据我所知,此“处理”与改型API调用本身无关]
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new Interceptor() {
@Override
public okhttp3.Response intercept(Chain chain) throws IOException {
Request request = chain.request();
okhttp3.Response response = chain.proceed(request);
// todo deal with the issues the way you need to
if (response.code() == 500) {
startActivity(
new Intent(
ErrorHandlingActivity.this,
ServerIsBrokenActivity.class
)
);
return response;
}
return response;
}
})
.build();
Retrofit.Builder builder = new Retrofit.Builder()
.baseUrl("http://your_url")
.client(okHttpClient)
.addConverterFactory(GsonConverterFactory.create());
Retrofit retrofit = builder.build();