【发布时间】:2023-03-11 22:11:01
【问题描述】:
在我们的应用程序中,我们遇到了一种特殊情况 - 如果我们的 App.specialFlag == true,我们需要停止来自我们代码的任何请求。我们认为,在这种情况下,最好的方法是包含特殊的Interceptor,它将停止我们的任何请求,如下所示:
if (App.specialFlag) {
// Somehow stop request
} else {
return chain.proceed(chain.request());
}
此外,我们应该注意,我们使用 RxJavaCallAdapterFactory 将响应包装到 Observables 中。
但是我们在 OkHttp 拦截器中没有看到任何停止请求的方法。
我们想出了两种方法来解决我们的问题:
a) 创建特殊的 ApiService.class 用于在我们的 API 中包装每个请求,如下所示:
public Observable<User> getUserDetails() {
if (App.specialFlag) {
return Observable.just(null);
}
return api.getUserDetails();
}
但我们认为它是丑陋和麻烦的解决方案。
b) 在 Interceptor 中抛出一个RuntimeException,然后在我们使用 API 的每个地方捕获它。
第二种方案也不好,因为我们的链中需要包含很多onErrorResumeNext操作符。
可能有人知道,如何以更“聪明”的方式处理我们的情况?..
提前致谢!
【问题讨论】:
标签: android retrofit rx-java okhttp