2017-04-17 53 views
0

在應用程序中的所有請求中,如果發生錯誤,需要執行某些操作。 我不想在每個請求中手動處理此操作。有錯誤401在所有請求中動作

是否可以在OkHttp級別解決此問題,以便它立即適用於所有請求?

改造和OkHttp類:

public class RestApi { 

    public final User user; 
    private PreferenceHelper preferenceHelper; 

    public static final String TAG = "RestApi: "; 

    @Inject 
    public RestApi(PreferenceHelper preferenceHelper) { 
     this.preferenceHelper = preferenceHelper; 

     TokenAppendingHeaderInterceptor tokenInterceptor = new TokenAppendingHeaderInterceptor(); 
     HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor(); 
     interceptor.setLevel(HttpLoggingInterceptor.Level.BODY); 

     OkHttpClient client = new OkHttpClient.Builder() 
       .addInterceptor(interceptor) 
       .addInterceptor(tokenInterceptor) 
       .connectTimeout(10, TimeUnit.SECONDS) 
       .writeTimeout(10, TimeUnit.SECONDS) 
       .readTimeout(30, TimeUnit.SECONDS) 
       .build(); 


     Retrofit retrofit = new Retrofit.Builder().baseUrl(Const.Url.API) 
       .client(client) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) 
       .build(); 
     user = retrofit.create(User.class); 
    } 






    public class TokenAppendingHeaderInterceptor implements Interceptor { 

     @Override 
     public okhttp3.Response intercept(Chain chain) throws IOException { 
      Request request = chain.request(); 
      String token = preferenceHelper.getToken(); 
      Request newRequest = request.newBuilder() 
        .addHeader(Const.Url.COOKIE, token) 
        .build(); 
      return chain.proceed(newRequest); 
     } 
    } 


    public String getCookiesFromResponse(Response response) { 
     String cookies = ""; 
     List<String> listCookies; 
     try { 
      listCookies = response.headers().toMultimap().get("Set-COOKIE"); 
      cookies = CookieHelper.getStringCookies(listCookies); 
     } catch (NullPointerException e) { 
      Log.d(TAG, "getCookiesFromResponse: BITRIX can't send cookies"); 
     } finally { 
      return cookies; 
     } 
    } 

} 

回答

0

進行身份驗證的要求 添加頁眉在你的代碼TokenAppendingHeaderInterceptor類方法攔截添加hweaders這樣 [R

equest.addheader('Content-Type': 'application/json;charset=UTF-8'); 
request.addheaders('Authorizcation', 'Basic '+btoa(username + ':' + password)); 

我認爲這將幫助你