In my Android App I have a generated (Swagger) ApiClient which gets initialized with a Token to identify the User.
This Token (which comes from the Server) can expire.
I get Observable“s with Data from my WebService via myApiClient.myServiceMethod(params)
When I get 401 from the Server it means my Token is expired and I have to initialize myApiClient again (to get it with an unexpired Token).
How myApiClient is initialized. It is returned by getMyApiClient()
//getOkHttpClientWithToken() first issues another Server call to get an
//unexpired Token and then returns an OkHttpClient with that Token set.
myApiClient = new ApiClient()
.getAdapterBuilder()
.baseUrl(url)
.client(getOkHttpClientWithToken())
.build()
.create(MyApiClient.class);
I get the Observable from myApiClient calls
Observable<Result> getResultObservable(Type param1, Type param2) {
return Observable.just(getMyApiClient())
.flatMap(myApiClient ->
myApiClient.getResult(param1, param2).cache()
);
}
What I tried is
//How to recreate myApiClient and Retry call on new myApiClient when an Error occurs
getResultObservable(param1, param2)
.take(1)
.subscribe(result -> {
doSomethingWithResult();
}
});
Works but is done on every error, not just 401 and may never end
I need something like
getResultObservable(param1, param2)
.take(1)
.subscribe(result -> {
doSomethingWithResult();
}, e -> {
if(e.getMessage.equals("HTTP 401")) {
"Transform this Observable to getResultObservable with new myApiClient and emit Result in onNext"
} else {
"Other error inform User and stop."
}
}
});