1

I/O を実行するクラス (ABC と呼びましょう) があります。FileOutputStream.close のようないくつかのものは、それらの周りに try catch ブロックを使用する必要があります。さらに、ユーザーと私が何が起こっているのかを知るのに役立つ独自のスロー可能なオブジェクトを作成しました。

このクラスでは、それを作成するアクティビティのコンテキストで渡し、スロー可能なテキストでダイアログ ボックスを作成して警告するようにしました。

これが私の問題です。このクラスを新しいスレッドから実行する必要がありますが、スロー可能なテキストから情報を取得したいと考えています。

たとえば、これは私のクラスの典型的な catch 句のようです。

new AlertDialog.Builder(myContext)
                        .setTitle("Error Message")
                        .setMessage(
                                "Error Code: #006" + "\n" + T.toString())
                        .setNeutralButton("OK",
                                new DialogInterface.OnClickListener() {

                                    @Override
                                    public void onClick(
                                            DialogInterface dialog,
                                            int which) {
                                        // TODO: Add Ability to Email
                                        // Developer

                                    }
                                }).show();

私はただのようなことをしますか

throw new Throwable(throwable);

これはアラートダイアログの代わりにABCクラス内にありますか? 次に、警告ダイアログを、Runnable インターフェイスの run メソッドが呼び出される try catch に移動するか、または asynchtask のバックグラウンドで実行しますか?

4

1 に答える 1

2

Java のThread.UncaughtExceptionHandlerを使用して、テキストを保存/ダイアログを表示します。したがって、次のように、Thread.UncaughtExceptionHandler を拡張する新しいクラスを作成します。

public class myThreadExceptionHandler implements Thread.UncaughtExceptionHandler
{
    private DataTargetClass dataTarget;
    public myThreadExceptionHandler(DataTargetClass c)
    { 
        dataTarget = c;
    }
    public void uncaughtException(Thread t, Throwable e)
    {
        dataTarget.exceptionObject = e;
        dataTarget.onException();
        // Just substitute in whatever method your thread uses to return information.
    }
}

スレッドを開始したコードでは、次のようにします。

foo = new DataTargetClass();
Thread t = new Thread(myIoRunnable(foo));
t.setUncaughtExceptionHandler(new myThreadExceptionHandler(foo));
t.start();
于 2012-05-10T04:32:25.680 に答える