J'utilise les lignes de code suivantes pour ajouter un en-tête par défaut à toutes mes demandes envoyées à l'aide de Retrofit2:
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);
}
});
}
Après la mise à niveau de retrofit vers la version beta-3, j'ai dû également mettre à niveau OkHttp vers OkHttp3 (en fait, je viens de changer le nom des packages okhttp en okhttp3, la bibliothèque est incluse dans retrofit). Après cela, je reçois des exceptions de cette ligne:
defaultHttpClient.networkInterceptors().add(new Interceptor());
Causé par: Java.lang.UnsupportedOperationException at Java.util.Collections $ UnmodifiableCollection.add (Collections.Java:932)
Causé par: Java.lang.ExceptionInInitializerError
Quel est le problème ici?
Vous devez utiliser le générateur si vous souhaitez créer un objet client OkHttp (3).
Essayez de changer ceci:
private static OkHttpClient defaultHttpClient = new OkHttpClient();
Pour quelque chose comme ça:
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();
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'
Vous devriez probablement utiliser ces versions. Mettez-les simplement, synchronisez votre gradle, supprimez toutes les importations et réessayez.
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.logging.HttpLoggingInterceptor;
import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;
Pour additionner la réponse de V.Sch, avec Java Lambda nous pouvons raccourcir cela à
OkHttpClient httpClient = new OkHttpClient.Builder()
.addInterceptor(
chain -> {
Request request = chain.request().newBuilder()
.addHeader("Accept", "Application/JSON").build();
return chain.proceed(request);
}).build();