Я пытаюсь обрабатывать исключения в приложении на глобальном уровне, поэтому модификация выдает ошибку, которую я улавливаю в каком-то конкретном классе с логикой для обработки этих ошибок.
У меня есть интерфейс
@POST("/token")
AuthToken refreshToken(@Field("grant_type") String grantType, @Field("refresh_token") String refreshToken);
и наблюдаемые
/**
* Refreshes auth token
*
* @param refreshToken
* @return
*/
public Observable<AuthToken> refreshToken(String refreshToken) {
return Observable.create((Subscriber<? super AuthToken> subscriber) -> {
try {
subscriber.onNext(apiManager.refreshToken(REFRESH_TOKEN, refreshToken));
subscriber.onCompleted();
} catch (Exception e) {
subscriber.onError(e);
}
}).subscribeOn(Schedulers.io());
}
Когда я получаю 401 с сервера (неверный токен или какая-то другая ошибка, связанная с сетью), я хочу обновить токен и повторить остальной вызов. Есть ли способ сделать это с помощью rxjava для всех вызовов rest с какой-либо наблюдаемой, которая будет перехватывать эту ошибку глобально, обрабатывать ее и повторять вызов, который ее вызвал?
На данный момент я использую тему, чтобы поймать ошибку в .subscribe (), как это
private static BehaviorSubject errorEvent = BehaviorSubject.create();
public static BehaviorSubject<RetrofitError> getErrorEvent() {
return errorEvent;
}
и в каком-то звонке
getCurrentUser = userApi.getCurrentUser().observeOn(AndroidSchedulers.mainThread())
.subscribe(
(user) -> {
this.user = user;
},
errorEvent::onNext
);
затем в своей основной деятельности я подписываюсь на эту тему поведения и анализирую ошибку
SomeApi.getErrorEvent().subscribe(
(e) -> {
//parse the error
}
);
но я не могу повторить вызов наблюдаемого, которое вызывает ошибку.
refreshToken()
наблюдаемую с другими вызовами? - person a.bertucci   schedule 05.10.2014