Intereting Posts
Статические фрагменты и динамические фрагменты ПРЕДУПРЕЖДЕНИЕ: невозможно записать файл кэша jarlist Ошибка Разбавление класса com.google.android.maps.MapView Сохранение прозрачного изображения в Android с помощью ALPHA_8 Как открыть всплывающее окно диалога «Не спрашивайте меня снова»? Android Как приложения Media Player Android, такие как MXPlayer и MoboPlayer, воспроизводят неподдерживаемые форматы файлов, такие как MKV? Подождите, пока поток не появится на Android Возможно ли для Android VM собирать статические переменные без уничтожения всего приложения Android? Не удается прочитать сокет InputStream на Jelly Bean Как настроить соединение с DVR и декодировать данные? Keytool не запрашивает пароль (используя Facebook lib с Android) Как увеличить список элементов из центра пинча "Android.util.AndroidRuntimeException: requestFeature () необходимо вызвать перед добавлением содержимого" в showDialog (dialogId) Android Перетаскивание кнопки Ссылка на предыдущие сопоставленные группы в регулярном выражении

Есть ли способ добавить параметр запроса к каждому запросу с помощью Retrofit 2?

Мне нужно добавить параметр запроса для каждого запроса, сделанного библиотекой Retrofit 2.0.0-beta2. Я нашел это решение для Retrofit 1.9, но как добавить RequestInterceptor в новейшую версию библиотеки?

Мой интерфейс:

 @GET("user/{id}") Call<User> getUser(@Path("id")long id); @GET("users/") Call<List<User>> getUser(); 

Клиент:

 Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(CLIENT) // custom OkHTTP Client .build(); service = retrofit.create(userService.class); 

Solutions Collecting From Web of "Есть ли способ добавить параметр запроса к каждому запросу с помощью Retrofit 2?"

Для полноты, вот полный код, который вам нужно добавить для каждого запроса Retrofit 2.x с помощью OkHttp-Interceptor:

 OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); HttpUrl url = request.url().newBuilder().addQueryParameter("name","value").build(); request = request.newBuilder().url(url).build(); return chain.proceed(request); } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl("...") .client(client) .build(); 

Теперь у Retrofit есть версия 2.0.0, и это мое решение:

 OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { String uid = "0"; long timestamp = (int) (Calendar.getInstance().getTimeInMillis() / 1000); String signature = MD5Util.crypt(timestamp + "" + uid + MD5_SIGN); String base64encode = signature + ":" + timestamp + ":" + uid; base64encode = Base64.encodeToString(base64encode.getBytes(), Base64.NO_WRAP | Base64.URL_SAFE); Request request = chain.request(); HttpUrl url = request.url() .newBuilder() .addQueryParameter("pageSize", "2") .addQueryParameter("method", "getAliasList") .build(); request = request .newBuilder() .addHeader("Authorization", "zui " + base64encode) .addHeader("from_client", "ZuiDeer") .url(url) .build(); Response response = chain.proceed(request); return response; } }).build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(ApiConstants.API_BASE_URL) .client(client) .addConverterFactory(GsonConverterFactory.create()) .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) .build(); mRestfulService = retrofit.create(RestfulService.class); 

Вы должны переключиться на Interceptor из OkHttp . Создайте OkHttpClient , добавьте Interceptor к этому проходу этого клиента в Retrofit Builder .

 OkHttpClient client = new OkHttpClient(); client.interceptors().add(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { ... } }); Retrofit retrofit = new Retrofit.Builder() .baseUrl("...") .client(client) .build(); 

Затем вы можете настроить запрос к вашим потребностям, используя chain.request().newBuilder() . Подробнее см. В документации .

В 3.2.0 и выше вместо этого вы должны использовать addInterceptor() в OkHttpClient.Builder .

Например, с Retrolambda :

 HttpLoggingInterceptor loggingInterceptor = new HttpLoggingInterceptor() .setLevel(HttpLoggingInterceptor.Level.BASIC); Interceptor clientInterceptor = chain -> { Request request = chain.request(); HttpUrl url = request.url().newBuilder().addQueryParameter("name", "value").build(); request = request.newBuilder().url(url).build(); return chain.proceed(request); }; OkHttpClient client = new OkHttpClient.Builder() .addNetworkInterceptor(clientInterceptor) .addInterceptor(loggingInterceptor) .build(); Retrofit retrofit = new Retrofit.Builder() .baseUrl(BASE_URL) .addConverterFactory(GsonConverterFactory.create()) .client(client) .build();