Как обновить ACCESS-TOKEN в Retrofit2/RxJava2

279
29 декабря 2017, 00:30

Я делаю запрос (любой, авторизация, регистрация и тд) и только потом узнаю, что нужно обновить TOKEN, то есть получаю ошибку 401.

Вот запрос для авторизации:

BaseApplication.getApiClient()
                .signIn(accessToken, body)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new SingleObserver<UserProfile>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d("-- SignInOnSubscribe", "Subscribed!");
                    }
                    @Override
                    public void onSuccess(UserProfile userProfile) {
                        if (userProfile.getErrorDetails() != null) {
                            onSignInFinishedCallback.onLoginFailure(userProfile.getErrorDetails());
                            Log.d("-- SignInOnError", userProfile.getErrorDetails());
                        } else {
                            onSignInFinishedCallback.onLoginSuccess(userProfile);
                            profileRepository.updateUserProfile(userProfile);
                            Log.d("-- SignInOnSuccess", userProfile.getName());
                        }
                    }
                    @Override
                    public void onError(Throwable e) {
                        Log.d("-- SignInOnError", e.getMessage());
                        if (e.getMessage().equals(Constants.CODE_UNAUTHORIZED)){
                            // Действие при ошибке 401
                        }
                        onSignInFinishedCallback.onLoginFailure(e.getMessage());
                    }
                });

Сами запросы к API:

@POST("/api/login")
Single<UserProfile> getAccessToken(@Body Map<String, String> requestBody);
@POST("/api/abonent/login")
Single<UserProfile> signIn(@Header("X-ACCESS-TOKEN") String accessToken,
                             @Body Map<String, String> requestBody);

Скажем, запрос на авторизацию - запрос 1, запрос на получение TOKEN - запрос 2.

Вопрос: Как обновить TOKEN если получил ошибку в запросе 1 и после успеха запроса 2, обратно делать запрос 1?

READ ALSO
Перевод из imageView в File

Перевод из imageView в File

Пытаюсь отправить изображение в androidВ java делаю так

294
Hadoop (HDFS) - взаимодействие с данными через Java

Hadoop (HDFS) - взаимодействие с данными через Java

Я пытаюсь взаимодействовать с файлами HDFS (читать, создавать и тд

248