2017-04-17 16 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クラスをヘッダを追加し、私はそれを考えて、この R

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

ようhweadersを追加お手数ですが

関連する問題