Я новичок в Rxjava. Я хочу получить токен доступа (полученный как часть заголовков) из ответа на первый вызов API и затем использовать этот токен доступа (в качестве заголовка) для последующих вызовов API.
Примечание: в первом вызове API ответ не имеет тела, возвращаются только заголовки.
Мой сетевой интерфейс:
public interface NetworkInterface {
@POST("https://appauth.treuspan/Login")
Observable<Response<Void>> getAuthDetails(
@Header("Content-Type") String contentType,
@Body AuthRequestDetails authRequestDetails
);
@POST("https://appauth.treuspan//storedetails")
Observable<StoreDetailsResponse> getStoreDetails(
@Header("Content-Type") String contentType,
@Header("Accept") String accept,
@Header("Authorization") String authorization,
@Body AuthRequestBody authRequestBody
);
}
Мои наблюдаемые методы:
public Observable<Response<Void>> getAuthObservable() {
return NetworkClient.getRetrofit().create(NetworkInterface.class)
.getAuthDetails("application/x-www-form-urlencoded",
new AuthRequestDetails().getAuthRequestDetails())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Response<Void>>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(Response<Void> voidResponse) {
String access_token_received = voidResponse.headers().get("access_token");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
Выше не компилируется. Его компиляция говорит:
Incompatible type:
required: io.reactivex.Observable<retrofit2.Response<java.lang.Void>>
Found: void
Если я могу успешно выполнить вышеуказанный вызов, тогда я должен использовать токен доступа как часть заголовка в следующем вызове следующим образом
public Observable<StoreDetailsResponse> getStoreDetailsObservable() {
return NetworkClient.getRetrofit().create(NetworkInterface.class)
.getStoreDetails("application/x-www-form-urlencoded",
"application/json",
"Bearer access_token_received",
new AuthRequestBody().getAuthRequestBody())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<StoreDetailsResponse>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(StoreDetailsResponse response) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
});
}
Приведенный выше код также не компилируется. Это говорит:
Incompatible type:
required: io.reactivex.Observable<com.example.androidtest.model.StoreDetailsResponse>
Found: void
Пожалуйста, подскажите, как мне этого добиться.