Является ли хорошей практикой удерживать в значении перехватчика сетевых вызовов ссылку, которая может измениться с помощью Dagger2? - PullRequest
0 голосов
/ 13 ноября 2018

Я хочу не добавлять в каждый маркер сетевого вызова и параметры локали, но они не являются постоянными и могут измениться. Чтобы добиться этого, я хочу использовать сетевой перехватчик. Строка локали взята из LocaleManager, который содержит ссылку на PreferenceManager ... А у UserManager есть токен поля, который довольно часто обновляется из серверной части. Сеть по модулю:

@Provides
@Singleton
@QueryInterceptor
public Interceptor queryInterceptor(@UserLocale final String userLocale) {
    return new Interceptor() {
        @Override
        public Response intercept(@NonNull Chain chain) throws IOException {
            Request request = chain.request();
            final HttpUrl url = request.url().newBuilder()
                    .addQueryParameter(QUERY_PARAM_OS, ANDROID_OS)
                    .addQueryParameter(QUERY_PARAM_VERSION, BuildConfig.VERSION_NAME)
                    .addQueryParameter(QUERY_PARAM_LOCALE, userLocale)
                    .build();
            request = request.newBuilder().url(url).build();
            return chain.proceed(request);
        }
    };
}

Язык:

 @Provides
@UserLocale
public String userLocale(LocaleManager localeManager) {
    return localeManager.getCurrentLanguageCode();
}

и что-то похожее с токеном пользователя.

Это хорошая практика?

Извините, Dagger2 для меня все еще довольно новый.

1 Ответ

0 голосов
/ 13 ноября 2018

Указано, что вы не должны хранить локаль в графике, так как при изменении конфигурации ваша локаль не будет обновляться.У вас может быть «ConfigurationComponent» с собственной областью действия, но в вашем случае я просто удалю языковой стандарт из графика:

@Provides
@Singleton
@QueryInterceptor
public Interceptor queryInterceptor(final LocaleManager localeManager) {
    return new Interceptor() {
        @Override
        public Response intercept(@NonNull Chain chain) throws IOException {
            Request request = chain.request();
            final HttpUrl url = request.url().newBuilder()
                    .addQueryParameter(QUERY_PARAM_OS, ANDROID_OS)
                    .addQueryParameter(QUERY_PARAM_VERSION, BuildConfig.VERSION_NAME)
                    .addQueryParameter(QUERY_PARAM_LOCALE, localeManager.getLocal())
                    .build();
            request = request.newBuilder().url(url).build();
            return chain.proceed(request);
        }
    };
}
...