2016-01-24 6 views
22

Я использую следующие строки кода, чтобы добавить заголовок по умолчанию для всех моих запросов, отправленных с использованием Retrofit2:OkHttpClient бросает исключение после обновления до OkHttp3

private static OkHttpClient defaultHttpClient = new OkHttpClient(); 
static { 
    defaultHttpClient.networkInterceptors().add(new Interceptor() { 
     @Override 
     public Response intercept(Chain chain) throws IOException { 
      Request request = chain.request().newBuilder() 
        .addHeader("Accept", "Application/JSON").build(); 
      return chain.proceed(request); 
     } 
    }); 
} 

После обновления переоснащения бета-3 версии, у меня было обновить OkHttp до OkHttp3 (на самом деле я только что изменил имена пакетов с okhttp на okhttp3, библиотека включена в модификацию). После этого я получаю исключение из этой строки:

defaultHttpClient.networkInterceptors().add(new Interceptor()); 

Вызванный: java.lang.UnsupportedOperationException в java.util.Collections $ UnmodifiableCollection.add (Collections.java:932)


Вызванный: java.lang.ExceptionInInitializerError


В чем проблема?

ответ

56

Вы должны использовать построитель, если хотите создать клиентский объект OkHttp (3).

изменение Попробуйте это:

private static OkHttpClient defaultHttpClient = new OkHttpClient(); 

Чтобы что-то вроде этого:

OkHttpClient defaultHttpClient = new OkHttpClient.Builder() 
     .addInterceptor(
      new Interceptor() { 
      @Override 
      public Response intercept(Interceptor.Chain chain) throws IOException { 
        Request request = chain.request().newBuilder() 
        .addHeader("Accept", "Application/JSON").build(); 
       return chain.proceed(request); 
       } 
      }).build(); 
+0

OK отлично! Благодаря! –

+0

Спасибо за четкое решение – bheatcoker

+0

Да. он работает нормально. спасибо за идеальное решение. –

1
compile 'com.squareup.retrofit2:retrofit:2.1.0' 
compile "com.squareup.retrofit2:converter-gson:2.1.0" 
compile "com.squareup.retrofit2:adapter-rxjava:2.1.0" 
compile 'com.squareup.okhttp3:logging-interceptor:3.4.0' 

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

import okhttp3.Interceptor; 

import okhttp3.OkHttpClient; 

import okhttp3.Request; 

import okhttp3.Response; 

import okhttp3.logging.HttpLoggingInterceptor; 

import retrofit2.Retrofit; 

import retrofit2.converter.gson.GsonConverterFactory; 
+0

вот что я искал :) – Bawa