2017-04-17 4 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를 추가하려면 코드에서 요청 에서 인증 헤더를 추가 도움이 될 것입니다