如何解决如何在 Android 中的 OkHttp 拦截器中处理 IOExceptions?
我有一个自定义拦截器来将 API 密钥附加到曾经的 API 请求。代码如下:
write
我看到第 public class HeaderInterceptor implements Interceptor {
private final ProfileDbDataSource profileDbRepository;
@Inject public HeaderInterceptor(ProfileDbDataSource profileDbRepository) {
this.profileDbRepository = profileDbRepository;
}
@NonNull @Override public Response intercept(@NonNull Chain chain) throws IOException {
if (!chain.request().url().toString().contains(Constants.GET_API_KEY)) {
Request.Builder requestBuilder = attachApiKeyAsQueryParam(chain);
return chain.proceed(requestBuilder.build());
}
return chain.proceed(chain.request());
}
private Request.Builder attachApiKeyAsQueryParam(Chain chain) {
String apiKey = profileDbRepository.getLoggedInProfile().blockingGet().getApiKey();
Request original = chain.request();
HttpUrl originalHttpUrl = original.url();
HttpUrl url = originalHttpUrl.newBuilder()
.addQueryParameter(Constants.USER_API_KEY,apiKey)
.build();
return original.newBuilder().url(url);
}
}
行发生了一些崩溃,所有这些异常都是 return chain.proceed(requestBuilder.build());
的子类。
我见过 IOException
、SocketTimeoutException
和 UnkNownHostException
。
这是一个堆栈跟踪:
ConnectException
解决方法
这不是您的拦截器的问题,而是您如何使用网络请求的 Rx 流的问题。 IOExceptions 通常是预期的错误,您应该准备好在执行 I/O 时捕获和处理它们。
要使用 Rx Observable 执行此操作,请在调用 onError
时为 subscribe
参数传递错误处理程序:
apiClient.request()
.subscribe(
/* onNext */ (response) -> /* handle response */,/* onError */ (error) -> /* handle error */
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。