3

我使用Retrofit将我的应用程序连接到 web 后端。我们使用异步回调方法在应用程序的不同点执行请求。

我将如何添加一个在每次 http 请求失败时通知的侦听器。

我目前的想法是创建一个自定义回调类,我的应用程序中的所有回调都必须扩展。此回调将在每次失败时通知我的听众。

如果我将所有接口更改为仅此类的子类型除外,并将失败和成功方法设为最终方法 - 使用对抽象方法的回调 - 应该不可能错过整个应用程序中的调用。

有没有更简单的方法呢?

4

1 回答 1

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();
于 2014-02-06T15:31:24.377 回答