2015-08-30 24 views
18

Ben örnek hatası 403Uyarlama - Intercept yanıtları küresel

Ben başarısızlık kullanabilirsiniz farkındayım (RetrofitError hatası için, güçlendirme motoru tarafından alınan tüm yanıtları önünü ve HTTP hata kodunu taramak istiyorum) Her isteğin geri çağrılması ve 403'leri kontrol et ama cevabı global olarak sarmak istiyorum.

İstek kesintisinin mümkün olduğunu görebiliyorum, ancak benzer bir yanıt seçeneği göremiyorum.

Herhangi bir öneriniz var mı?

cevap

42

Bunu, uyumluluğun kullandığı OkHttpClient'e bir engelleyici ekleyerek başardım.

Retrofix 2.x:

OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder(); 
    clientBuilder. 
      addInterceptor(new Interceptor() { 
       @Override 
       public Response intercept(Chain chain) throws IOException { 
        Request request = chain.request(); 
        Response response = chain.proceed(request); 
        if (response.code() == 403) { 
         handleForbiddenResponse(); 
        } 
        return response; 
       } 
      }); 


    Retrofit retrofit = new Retrofit.Builder() 
      .baseUrl(API_BASE_URL) 
      .addConverterFactory(GsonConverterFactory.create()) 
      .client(clientBuilder.build();) 
      .build(); 

Uyarlama 1.x:

public class ForbiddenInterceptor implements Interceptor { 

    @Override 
    public Response intercept(Chain chain) throws IOException { 
     Request request = chain.request(); 
     Response response = chain.proceed(request); 
     if (response.code() == 403) { 
      handleForbiddenResponse(); 
     } 
     return response; 
    } 
} 



OkHttpClient okHttpClient = Utils.createUnsafeOkHttpClient(); 
okHttpClient.interceptors().add(new ForbiddenInterceptor()); 

RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder() 
     .setEndpoint(API_BASE_URL) 
     .setClient(new OkClient(okHttpClient)); 
+0

yapmanız gerekir ben isterdim DoStuff() olmak bunu ne olabileceğini bilmek ActivityFragmentInteraction –

+0

için kullanılacak suppoded neyi açıklayabilir bir arka plan iş parçacığıdır. – KickingLettuce

+0

** RestAdapter ** –

0

Diğer bir olasılık Güçlendirme en OkClient içinde execute yöntemini geçersiz etmektir. şöyle bir şey gitti yani benim durumumda, belirli bir cevap başlığında arıyordu:

OkClient client = new OkClient(okHttpClient) { 
    @Override 
    public retrofit.client.Response execute(retrofit.client.Request request) throws IOException { 
     retrofit.client.Response response = super.execute(request); 

     // Do whatever with 'response', such as looking for the value of a particular header: 

     List<retrofit.client.Header> headers = response.getHeaders(); 
     for (retrofit.client.Header header : headers) { 
      if (MY_HEADER.equalsIgnoreCase(header.getName())) { 
       this.savedValue = header.getValue(); 
       break; 
      } 
     } 

     return response; 
    } 
}; 

RestAdapter.Builder restAdapterBuilder = new RestAdapter.Builder() 
     .setEndpoint(API_BASE_URL) 
     .setClient(client);