2

私は独自の例外 (MyException) を作成し、ロギングを実装し、トーストの形式でエラー メッセージを表示しました。これがその短編です...

public class MyException extends Exception {

   public MyException(String msg) {
      Looper.prepare();
       Toast.makeText(Controller.getInstance().getApplicationContext(), msg , Toast.LENGTH_LONG).show();
       //Looper.loop();
       Looper.myLooper().quit();
   }
}

例外がスローされてキャッチされるスレッドを実装するまでは、すべて問題ありませんでした。

私が Looper クラスで遊んでいたことは、おそらくすでにご覧になっていると思いますが、正直なところ、私はそれを機能させる方法を知りません。それは正しいアプローチですか?また、コントローラーに ApplicationContext の参照が既に格納されていることもわかります。ActivityContext でもそれを行い、この ActivityContext から Toast を作成しますか? (しかし、これはパフォーマンスの面で良い習慣ではないと聞きました)

アップデート

例外がアクティビティのスレッドでキャッチされている場合、これは私が行くべき方法ですか?

private Runnable exceptionCatchingThread   = new Runnable() {
          @Override
          public void run() {
           try { 
                throw new Exception();
           } catch (Exception e) {
              this.e = e;
              runOnUiThread(handleThreadExceptions); }
           }
    }

private Runnable  handleThreadExceptions  = new Runnable() {
             @Override
              public void run() {
               //Show toast or call the general ExceptionHandler, 
               //which is doing logging and stuff
                Helper.handleException(e);
               }
}
4

1 に答える 1

3

Exceptionを使用して、問題が発生したことを発信者に通知する必要があります。その通知、ログ、トーストなどで何かを行うのは呼び出し元の責任です。例外クラス自体でそれを行うべきではありません。

トーストなどを行う例外をキャッチしたときに呼び出されるヘルパー メソッドを作成できます。これを複数のアクティビティから実行する場合は、コンテキストを渡す util 関数を作成できます。

public static void displayExceptionMessage(Context context, String msg) {
 Toast.makeText(context, msg , Toast.LENGTH_LONG).show();
}

そしてあなたの活動で:

try {
  // something that causes Exception
} catch (MyException e) {
  Helper.displayExceptionMessage(this, e.getMessage());
}
于 2010-10-04T17:52:07.727 に答える