В нашем приложении мы встретились с одним специальным случаем - если наш App.specialFlag == true
, нам нужно остановить любой запрос из нашего кода. И мы думаем, что наилучшим подходом в этой ситуации является специальный Interceptor
, который остановит любые наши запросы, примерно так:
if (App.specialFlag) {
// Somehow stop request
} else {
return chain.proceed(chain.request());
}
Кроме того, следует отметить, что мы используем RxJavaCallAdapterFactory
для переноса ответов в Observable
s.
Но мы не видим никаких методов для остановки запроса в OkHttp Interceptors.
Мы разработали два способа решения нашей проблемы:
a) Создайте специальный ApiService.class
для упаковки каждого запроса в нашем API следующим образом:
public Observable<User> getUserDetails() {
if (App.specialFlag) {
return Observable.just(null);
}
return api.getUserDetails();
}
Но мы считаем, что это уродливое и громоздкое решение.
b) Бросьте a RuntimeException
в Interceptor, а затем поймайте его в любом месте, где мы используем наш API.
Второе решение также не очень хорошо, потому что нам нужно включить в наши цепочки множество операторов onErrorResumeNext
.
Может кто-нибудь знает, как справиться с нашей ситуацией более "умным" способом?..
Спасибо заранее!