Android Исключение обработки - PullRequest
0 голосов
/ 01 сентября 2011

В Android я использую службу для извлечения данных из веб-службы и обновления базы данных sqlite извлеченными данными.

    class IncomingHandler extends Handler {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {
        case MSG_UPDATE_DATABASE:
            UpdateListThread thread = new UpdateListThread();
            thread.start();
            try {
                msg.replyTo.send(Message.obtain(null, MSG_UPDATE_DATABASE));
            } catch (RemoteException e) {
                // client is destroyed
            }
            break;
        default:
            super.handleMessage(msg);
        }
    }

Однако, если веб-сервис возвращает ошибку, я хочу выбросить исключение и обработать исключение в потоке пользовательского интерфейса (который связан с этим сервисом), чтобы я мог напечатать сообщение об исключении на экране.

Возможно ли это сделать?

ТИА

Ответы [ 2 ]

1 голос
/ 01 сентября 2011

Использовать трансляции:

    try {
        msg.replyTo.send(Message.obtain(null, MSG_UPDATE_DATABASE));
    } catch (RemoteException e) {
        context.sendBroadcast(new Intent()
            .setAction(Constants.ACTION_SERVICE_EXCEPTION)
            .putExtra("msg", e.getMessage()));
    }

А потом в вашей деятельности:

public class MyActivity extends Activity {
    protected BroadcastReceiver mSyncReceiver = new BroadcastReceiver() {
       @Override
       public void onReceive(final Context context, Intent intent) {
          String action = intent.getAction();

          if (action.equals(Constants.ACTION_SERVICE_EXCEPTION)) {
              Toast.makeText(context, intent.getStringExtra("msg"), Toast.LENGTH_SHORT).show();
          }
       }
   };

   @Override
   protected void onPause() {
      super.onPause();
      unregisterReceiver(mSyncReceiver);
   }

   @Override
   protected void onResume() {
      super.onResume();
      registerReceiver(mSyncReceiver, new IntentFilter(Constants.ACTION_SERVICE_EXCEPTION));
   }
}
0 голосов
/ 01 сентября 2011

Рекомендуемый метод в этом случае - использовать объекты Toast или Notification для уведомления пользователя. Как я правильно понимаю логику вашей программы, вам просто нужно передать сообщение Exception одному из конструкторов цитируемого объекта и инициировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...