0
我有令牌可以用它發出請求,這個令牌有一些lifeTime。 所以,當我得到401錯誤,我需要與其他請求refreshToken。 我想讓用戶順利進行(沒有任何中斷):如果得到401,比進行刷新,並且在用新的可用令牌重複第一個請求之後。如何用新的帖子值重複翻新請求
這裏是我的代碼:
@POST("/refresh_token")
Observable<Auth> refreshToken(@Body BodyAuth body);
@POST("/someLink")
Observable<Answer> someRequest(@Body OtherBody body);
Observable<Answer> makeSomeRequest(){
retutn someRequest(new Body(currentToken)).
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.compose(StatusCodeVerifier())
.retryWhen(RetryWithNewToken(requestManager))
}
public class StatusCodeVerifier<T> implements Observable.Transformer<Response<T>,T> {
@Override
public Observable<T> call(Observable<Response<T>> responseObservable) {
return responseObservable.
flatMap(new Func1<Response<T>, Observable<?>>() {
@Override
public Observable<?> call(Response<T> tResponse) {
if (tResponse.code() == 401){
throw new UnAuthorizedException("custom exception");
} else {
return Observable.just(tResponse);
}
}
});
}
}
public class RetryWithNewToken implements Func1<Observable<Throwable>, Observable<?>> {
private UserDataManager requestManger;
public RetryWithNewToken(RequestManager requestManger){
this.requestManger = requestManger;
}
@Override
public Observable<?> call(final Observable<Throwable> attempts) {
return attempts.flatMap(new Func1<Throwable, Observable<?>>() {
@Override
public Observable<?> call(final Throwable throwableObservable) {
if (throwableObservable instanceof UnAuthorizedException){
return requestManger. refreshToken().subscribe(new Action1<CbAuth>() {
@Override
public void call(TokenData newToken) {
updateToken(newToken);
//here i try to repeat previous request that was failed because of 401 error
Observable.just(attempts);
}
});
}
return Observable.error(throwableObservable);
}
});
}
}
稱爲成功refreshToken先前請求後,每一次,但它被稱爲無效(舊)數據。 那麼我怎樣才能用新的令牌數據重複請求?