我想在Interceptor for Retrofit 2中为各种异常(如套接字超时,404错误等)创建自定义响应。
下面是我的代码:
Interceptor responseCodeInterceptor = (Interceptor.Chain chain) -> {
Request request = chain.request();
okhttp3.Response response = null;
try {
response = chain.proceed(request);
if (response != null) {
switch (response.code()) {
case 401:
// todo
break;
case 404: // todo
break;
}
}
} catch (SocketTimeoutException e) {
JSONObject jsonObject = new JSONObject();
try {
jsonObject.put("status", "Error");
jsonObject.put("errors", "Socket time out exception");
ResponseBody body = ResponseBody.create(MediaType.parse("application/json"), jsonObject.toString());
return new Response.Builder().body(body)
.message("Socket time out exception")
.request(request)
.build();
} catch (JSONException ex) {
DebugLog.print(ex);
}
} catch (Exception e) {
Utils.hideProgressBar();
DebugLog.print(e);
}
return response;
};
现在,我担心的是,当我将上述代码用于“套接字超时异常”时,它给了我类似以下的异常:
java.lang.IllegalStateException: protocol == null
所以,任何人都可以帮助我如何在拦截器中创建自定义响应。
答案 0 :(得分:0)
这意味着您没有为protocol
对象的Response
属性设置任何值。
您可以通过以下方式做到这一点:
return new Response.Builder()
...
.protocol(Protocol.HTTP_1_1) // Or any other value that's suitable for your use case
.build();
您可以检查Protocol Javadoc来查看其他允许的值