2014-02-05 5 views
3

Я использую Retrofit для подключения своего приложения к webbackend. Мы используем асинхронные методы обратного вызова для выполнения запросов в разных точках приложения.Как уведомить одного слушателя о каждом неудавшемся Httprequest с Retrofit на Android

Как добавить слушателя, который уведомляется каждый раз, когда сбой HTTP-запроса.

Моя идея состоит в том, чтобы создать собственный класс обратного вызова, который должен распространяться на все обратные вызовы в моем приложении. Этот обратный вызов будет информировать моего слушателя о каждом сбое.

Если я изменяю весь интерфейс только за исключением подтипов этого класса и завершаю метод отказа и успешного завершения - с обратным вызовом абстрактного метода - не должно быть возможности пропустить вызов во всем приложении.

Есть ли более простой способ, чем это?

ответ

0

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

  • отправить событие, которое вы должны использовать что-то вроде:

    private void sendMessage() { 
         Intent intent = new Intent("event-networkerror"); 
         intent.putExtra("message", "data"); 
         LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
        } 
    
  • чтобы подписаться на событие:

    public void onResume() { 
         super.onResume(); 
         // Register mMessageReceiver to receive messages. 
         LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, 
          new IntentFilter("event-networkerror")); 
        } 
    
        // handler for received Intents for the "my-event" event 
        private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { 
         public void onReceive(Context context, Intent intent) { 
         // Extract data included in the Intent 
         String message = intent.getStringExtra("message"); 
         Log.d("receiver", "Got message: " + message); 
         } 
        }; 
    
        protected void onPause() { 
         // Unregister since the activity is not visible 
         LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver); 
         super.onPause(); 
        } 
    

Вы можете использовать ErrorHandler отправить эфир:

 class MyErrorHandler implements ErrorHandler { 
      public Throwable handleError(RetrofitError cause) { 
      Response r = cause.getResponse(); 
      // process error r.getStatus() 
      Intent intent = new Intent("event-networkerror"); 
      intent.putExtra("status",r.getStatus()); 
      LocalBroadcastManager.getInstance(this).sendBroadcast(intent); 
      return cause; 
      } 
     } 

     RestAdapter restAdapter = new RestAdapter.Builder() 
     .setEndpoint("...") 
     .setErrorHandler(new MyErrorHandler()) 
     .build(); 
+0

И как я подключить этот механизм в библиотеку Модифицированная HTTP? – Janusz

+0

Я отредактировал awnser, я использую retrofit + robospice, но я думаю, вы могли бы использовать модифицированный ErrorHandler – Felix

+0

Обработчик ошибок используется только в синхронных вызовах. В вызовах с обратным вызовом ErrorHandler не используется, как кажется. – Janusz