2016-09-19 80 views
1

我想查詢參數(訪問令牌)添加到每個請求隨着該tutorialRetrofit2:添加訪問令牌中的查詢參數與攔截

的問題是攔截器,這將算在被創建的每個請求累積ServiceGenerator:

httpClient.addInterceptor(new Interceptor() { 

也導致httpClient是靜態的,所有的攔截器將在不需要的請求中執行。

我應該爲普通請求創建自己的OkHttpClient,併爲令牌請求擁有自己的OkHttpClient嗎?我應該初始化攔截器和身份驗證只有一次,然後使用ServiceGenerator?還是有更好的方法?

+0

您可以創建幾個客戶,或添加標題爲翻新請求中的頭文件 –

回答

1

我認爲這不是一個好主意,作爲查詢參數添加訪問令牌

更好的辦法,是將其添加到自定義標題是這樣的:

okHttpClient = new OkHttpClient.Builder() 
       .cache(setCache(context)) 
       .certificatePinner(certificatePinnerBuilder.build()) 
       .retryOnConnectionFailure(false) 
       .readTimeout(READ_TIMEOUT, TimeUnit.MILLISECONDS) 
       .connectTimeout(CONNECTION_TIMEOUT, TimeUnit.MILLISECONDS) 
       .addInterceptor(new Interceptor() { 
        @Override 
        public okhttp3.Response intercept(Chain chain) throws IOException { 
         Request original = chain.request(); 

         Request request = original.newBuilder() 
           .header("Content-type", "application/json") 
           .header("AUTH_TOKEN", token) 
           .method(original.method(), original.body()) 
           .build(); 

         return chain.proceed(request); 
        } 
       }) 
       .addInterceptor(logger) 
       .build(); 

但是,您可以點擊此鏈接:

https://futurestud.io/tutorials/retrofit-2-how-to-add-query-parameters-to-every-request