2015-11-06 2 views
2

В предыдущих версиях модернизированных можно было добавить перехватчик и использовать, чтобы добавить параметры запроса, которые были глобально необходимы, например:дооснащения 2 замены addQueryParam

.setRequestInterceptor(new RequestInterceptor() { 
        @Override 
        public void intercept(RequestFacade requestFacade) { 
         requestFacade.addQueryParam("platform", "android"); 
         requestFacade.addQueryParam("app_version", com.package.BuildConfig.VERSION_NAME); 


       } 
      }) 

С новой реализацией, это вы должны использовать OkHttpClient .interceptors. С помощью этого нового подхода, как бы добавить параметры без удаления исходных параметров?

ответ

4

Вот реализация okhttp -

OkHttpClient client = new OkHttpClient(); 
client.interceptors().add(new Interceptor() { 
    @Override 
    public com.squareup.okhttp.Response intercept(Chain chain) throws IOException { 
     Request request = chain.request(); 
     HttpUrl url = request.httpUrl().newBuilder() 
        .addQueryParameter("platform", "android") 
        .addQueryParameter("app_version", com.package.BuildConfig.VERSION_NAME) 
        .build(); 
     Request newRequest = chain.request().newBuilder().url(url).build(); 
     return chain.proceed(newRequest); 
    } 
}); 

Добавить клиента к вашему дооснащения -

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("http://www.example.com") 
    .client(client)   
    .build(); 
+0

Это прекрасно работает для параметров запроса, спасибо вам большое. Если возможно (я не могу найти ответ нигде, и я мог бы сделать новый вопрос о стеке, если это было необходимо), как бы добавить дополнительную функцию сообщения из этого перехвата. Например, если бы я хотел добавить дополнительный: .addPostField («sUserKey», «osdjnfj235k2k»), можно ли здесь? –

+1

Это не так просто сделать. Параметры post уже были преобразованы в 'RequestBody', когда перехватчик получает их, и нет методов их манипулирования. Вероятно, вам придется модифицировать 'RequestBody' самостоятельно, добавив новое поле. Вероятно, лучше всего открыть еще один вопрос, если никто не доберется до него, я сделаю удар этим вечером. – iagreen

+0

Последняя версия модифицированных бросков UnsupportedOperationException exception –

2

С retrofix 2.3.0 следующий код может быть использован:

final OkHttpClient client = new OkHttpClient.Builder().addInterceptor(new Interceptor() { 
    @Override 
    public Response intercept(final Chain chain) throws IOException 
    { 
     final Request request = chain.request(); 
     final HttpUrl url = chain.request().url().newBuilder() 
      .addQueryParameter("platform", "android") 
      .addQueryParameter("app_version", com.package.BuildConfig.VERSION_NAME) 
      .build(); 
     final Request newRequest = chain.request().newBuilder().url(url).build(); 
     return chain.proceed(newRequest); 
    } 
} 

Retrofit retrofit = new Retrofit.Builder() 
    .baseUrl("http://www.example.com") 
    .client(client)   
    .build(); 
Смежные вопросы