簡體   English   中英

攔截器沒有被稱為retrofit2

[英]Interceptor no getting called retrofit2

嘗試使用okhttp3和retrofit2添加攔截器以向請求添加標頭。 我注意到標題沒有添加到請求中,我的system.out.println調試行從未被調用過。 不知道為什么,但這是我的代碼:

創建服務:

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;
    }
}

您將client設置為默認的OkHttpClient 您可以使用newBuilder()從該客戶端創建新客戶端,但不要將其分配給任何客戶端。 如果您沒有使用第一個客戶端,您應該第一次分配一個構建器 -

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM