2014-11-30 1 views
0

У меня есть следующая ментальная модель, которая для моего приложения для Android все ошибки проверки подлинности должны обрабатываться в одном месте, а экран входа в систему должен прерываться и сверкать поверх стека представлений, чтобы позволить пользователю повторно проверять подлинность.Android async httpclient: как перехватить ошибки аутентификации в одном месте?

Не знаете, как это сделать с помощью AsyncHTTPClient.

Я не хочу обрабатывать запросы 401 и 404 для каждого запроса GET и POST, который я делаю. Звучит как много повторяющегося кода. Например, для Google и CNN, если я не аутентифицирован, я не хочу повторять код для обработки 401 не аутентифицированного кода как для CNN, так и для Google, потому что это тот же точный код.

Спасибо!

AsyncHttpClient client = new AsyncHttpClient(); 
client.get("http://www.google.com", new AsyncHttpResponseHandler() { 
    @Override 
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
      System.out.println(response); 
    } 
    @Override 
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable 
error) 
{ 
      error.printStackTrace(System.out);if 401, TELL USER he has to log in again 

    } 
}); 

AsyncHttpClient client = new AsyncHttpClient(); 
client.get("http://www.cnn.com", new AsyncHttpResponseHandler() { 
    @Override 
    public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
      System.out.println(response); 
    } 
    @Override 
    public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable 
error) 
{ 
      error.printStackTrace(System.out);if 401, TELL USER he has to log in again 

    } 
}); 

ответ

0

создать свой собственный подкласс для AsyncHttpResponseHandler и реализации onFailure в одиночку; Добавьте туда всю свою логику обработки отказа.

Используйте этот подкласс для своего client.get вместо AsyncHttpResponseHandler, просто применяя onSuccess.

client.get("http://www.cnn.com", new MyAsyncHttpResponseHandler() { 
     @Override 
     public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) { 
      System.out.println(response); 
     } 
     // onFailure handled by common code in MyAsyncHttpResponseHandler 
    } 
Смежные вопросы