2016-11-24 2 views
1

Попытка добавить перехватчик для добавления заголовков в запросы с okhttp3 и retrofit2. Я заметил, что заголовки не добавляются к запросам, и моя строка отладки system.out.println никогда не вызывалась. Не знаю почему, но здесь не мой код:Перехватчик не получает вызов retrofit2

создания службы:

OkHttpClient client = new OkHttpClient(); 

     client.newBuilder() 
       .addInterceptor(new ServiceInterceptor(context)) 
       .authenticator(new MyAuthenticator(context)) 
       .build(); 

     service = (new Retrofit.Builder() 
       .baseUrl(BASE_URL) 
       .client(client) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build()) 
       .create(Service.class); 

ServiceInterceptor:

public class ServiceInterceptor implements Interceptor { 

    private final Context context; 

    public ServiceInterceptor(Context context){ 
     this.context = context; 
    } 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request = chain.request(); 

     System.out.println("Interceptor"); 

     if(request.header("No-Authentication") == null){ 
      request = request.newBuilder() 
        .addHeader("User-Agent", "APP NAME") 
        .addHeader("Authorization", "bearer " + PreferenceManager.getDefaultSharedPreferences(context).getString("access_token", "")) 
        .build(); 
     } 

     return chain.proceed(request); 
    } 
} 

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

public class MyAuthenticator implements Authenticator { 
    private Context context; 

    public MyAuthenticator(Context context){ 
     this.context = context; 
    } 

    @Override 
    public Request authenticate(Route route, Response response) throws IOException { 
     //blah blah refresh token here... 

     return null; 
    } 
} 

ответ

3

Вы устанавливаете client к дефолту OkHttpClient. Вы создаете нового клиента от этого клиента, используя newBuilder(), но не присваивайте его чему-либо. Если вы не используете первого клиента, вы должны просто выделить строителя в первый раз -

OkHttpClient client = new OkHttpClient.Builder() 
      .addInterceptor(new ServiceInterceptor(context)) 
      .authenticator(new MyAuthenticator(context)) 
      .build(); 
+0

У меня была та же проблема. Я не назначал его новой переменной, поэтому все настройки конфигурации были потеряны. Но теперь, когда я назначил его переменной, она работает. – toobsco42

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