Задать вопрос
@newdancer

Как обновить Interceptor в OkHttp при использовании Retrofit?

Как обновить Interceptor в OkHttp при использовании Retrofit?
@Provides
    @Singleton
    OkHttpClient provideOkhttpClient(Cache cache) {
        return new OkHttpClient.Builder()
                .cache(cache)
                .addInterceptor(new AddCookiesInterceptor(mApplication))
                .addInterceptor(new ReceivedCookiesInterceptor(mApplication))
                .addInterceptor(provideHeaderTokenInterceptor(mApplication))
                .addInterceptor(provideHttpLoggingInterceptor())
                .build();
    }

    @Provides
    @Singleton
    Retrofit provideRetrofit(OkHttpClient okHttpClient) {
        return new Retrofit.Builder()
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .baseUrl(mBaseUrl)
                .client(okHttpClient)
                .build();
    }

    @Provides
    HeaderTokenInterceptor provideHeaderTokenInterceptor(Context context) {
        String token = Prefs.load(context, Prefs.PREFS_TOKEN);
        if (token != null && !token.isEmpty()) {
            return new HeaderTokenInterceptor(AppConstants.TOKEN_JWT + token);
        } else {
            return new HeaderTokenInterceptor("");
        }
    }

Использую provideHeaderTokenInterceptor для добавления токена при выполнении запросов. Но вот к примеру делаю авторизацию без токена, в ответе получаю токен. Сохраняю токен. Но при запросах он не используется так как provideHeaderTokenInterceptor больше не вызывается а используется существующий. Как можно исправить?
Сейчас помогает перезапуск приложения
  • Вопрос задан
  • 859 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
@acbelter
Можно переопределить метод intercept() и в нем добавлять header с токеном:
OkHttpClient.Builder builder = new OkHttpClient.Builder();
        builder.addInterceptor(new Interceptor() {
            @Override
            public Response intercept(@NonNull Chain chain) throws IOException {
                Request original = chain.request();
                String token = ""; // Get token from prefs
                if (!TextUtils.isEmpty(token)) {
                    Request.Builder requestBuilder = original.newBuilder()
                            .addHeader("Token", token);
                    Request request = requestBuilder.build();
                    return chain.proceed(request);
                } else {
                    return chain.proceed(original);
                }
            }
        });
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы