2016-06-23 1 views
0

Я использую Retrofit2 для подключения к API на основе REST. Проблема в том, что для этого требуется положение lat/lng, но только для примерно 50% конечных точек. Мне интересно, как я должен динамически добавлять параметр запроса в OkHttpClient на основе некоторого логического. Мой код:Как добавить параметры динамического запроса в Retrofit2 OkHttpClient Interceptor?

public static APIEndpointInterface getHttpClient(Boolean addLatLng){ 
     OkHttpClient client = new OkHttpClient.Builder() 
       .addInterceptor(new Interceptor() { 
        @Override 
        public Response intercept(Chain chain) throws IOException { 

         LatLng location = App.getLocationRepository().getCurrentLocation(); 
         String lat = String.valueOf(location.latitude); 
         String lng = String.valueOf(location.longitude); 

         Request request = chain.request(); 
         HttpUrl url = request.url().newBuilder() 
           .addQueryParameter("version", API_VERSION) 
           .addQueryParameter("app_version_code", String.valueOf(BuildConfig.VERSION_CODE)) 
           //ADD ONLY IF BOOLEAN PASSED TO METHOD IS TRUE 
           .addQueryParameter("lat", lat) 
           .addQueryParameter("lng", lng) 
           .port(PORT_HTTPS) 
           .build(); 
         ...... 

Есть ли другой вариант, кроме добавления lat/lng для каждого метода второго интерфейса?

ответ

0

Я только что нашел решение самостоятельно. Если это кому-то помогает:

Request request = chain.request(); 
HttpUrl.Builder builder = request.url().newBuilder(); 
builder.addQueryParameter("version", API_VERSION); 
builder.addQueryParameter("app_version_code",String.valueOf(BuildConfig.VERSION_CODE)); 
if (location) { 
    builder.addQueryParameter("lat", lat); 
    builder.addQueryParameter("lng", lng); 
} 
HttpUrl url = builder.build(); 
request = request.newBuilder() 
     .addHeader("Accept", "application/json") 
     .url(url) 
     .build();