2016-02-18 4 views
1

Начиная с OkHttp v3 OkHttpClient является неизменным, а также список перехватчиков.Retrofit2 и перехватчик одного запроса OkHttp3

Начиная с модернизации 2.0-бета3, это зависит от OkHttp v3.

В моем приложении мне нужно разобрать Google Analytics Campain ключ refferer, который имеет "= Ь = 2 & C = A 1 & 3" формат и добавить его, чтобы подписать запрос URL.

С предыдущей версией дооснащения это было легко сделать, добавив

retrofit.client().interceptors().add(0, chain -> { 
    final Request httpRequest = chain.request(); 
    return chain.proceed(httpRequest.newBuilder().url(httpRequest.httpUrl().toString() + "&" + request.getUtmParams()).build()); 
}); 

перед выполнением вызова и

retrofit.client().interceptors().remove(0); 

после вызова продолжения.

Невозможно понять, как добиться такого же поведения с новой версией. Пожалуйста, помогите.

UPD 1. Целью является управление URL-адресом запроса одного запроса. Добавление строки в конец - всего лишь пример. Использование @QueryMap является опцией, но для этого требуется строка параметров синтаксического анализа, которую я стараюсь избегать.

+0

OkHttp 'Interceptor's не сильно изменился. Анализ urm из url легко с помощью uri utils. –

ответ

-1

В зависимости от способа запроса, но здесь я использую GET

// Вы можете также использовать карты запроса для получения идеальной тот же результат

public interface ApiService { 

    @GET("api/{a}/{b}/{c}") 
    Call<Login> authenticate(@Path("a") String a, @Path("b") String password, @Path("c") String c); 
} 

Создать EntityObject

public EntityObject { 

    Public String a; 

    Public String b; 

    Public String c; 
} 

Используйте модификацию, чтобы сделать запрос с вашими параметрами

private void makeRemoteRequest(String a, String b, String c){ 

    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .build(); 

ApiInterface mService = retrofit.create(ApiService.class); 

Call<Login> mService = mService.authenticate(a, b, c); 
    mService.enqueue(new Callback<Login>() { 
     @Override 
     public void onResponse(Call<Login> call, Response<Login> response) { 


     } 

     @Override 
     public void onFailure(Call<Login> call, Throwable t) { 

     } 
    }); 
} 
+0

Да, это можно сделать с помощью QueryMap, но для этого требуется разбор строки «utm_params» (разделение на «&», а затем на «=»), и я хочу избежать этого. – Volkman

+0

Целью является управление URL-адресом запроса для одного запроса. Добавление строки в конец является всего лишь примером. – Volkman

0

Использовать карту запросов.

public interface ApiService { 
@GET("YOUR_BASE_URL") 
Call<Login> authenticate(@Query("a") String a, @Query("b") String b,@Query("c") String c); 
} 
0

Вы можете установить перехватчик один раз, а затем использовать заголовок для запуска перехватчика. См. this post.

Смежные вопросы