0

Android AsyncTaskを使用して、Web からデータを取得しています。random.org からバイトを取得して表示する単純なプログラム (「crack me」) です。また、このプログラムは、random.org の公開鍵を固定して傍受プロキシを検出します。

onPreExecutedoInBackground、およびを実装しonPostExecuteました。これらのメソッドは、「すべてがうまくいく」場合に必要です。で何か問題が発生した場合、UI スレッドではないため をdoInBackground表示できません。AlertDialogこのインターフェイスonErrorには、UI スレッドで実行される または類似のメソッドもありません。

このクラスを使用する場合、どのようにエラーを伝えますか?

4

4 に答える 4

2

私の提案は、AsyncTask クラスにフィールドを作成することです。何か問題が発生した場合は、例外がスローされます。

class SomeAsyncTask<..> extends AsyncTask<..> {
    Exception exception = null;
    public doInBackground(...) {
        try {
            . . . 
        } catch (Exception ex) {
            exception = ex;
        }
    }

    public onPostExecute(...) {
        if (exception != null) {
            // process exception on UI thread
        }
    }

} 
于 2012-08-27T20:41:04.107 に答える
2

でエラーをキャッチし、フィールド変数doInBackgroundに保存して、エラーが発生したかどうかをチェックインします。ExceptiononPostExecute

private Exception exception = null;

protected Void doInBackground(Void... params){
    try{
        doStuff();
    } catch (Exception ex){
        exception = ex;
    }

    return null;
}

protected void onPostExecute(Void result){
    if(exception != null){
        showException(exception);
    }
}

このコードを使用して独自のインターフェイスを簡単に作成し、それを使用するときにメソッドdoStuffshowExceptionメソッドを実装できます。

于 2012-08-27T20:41:39.223 に答える
1

onPostExecute() に必要な情報を返し、そこでダイアログを表示する必要があります。または、AsyncTask サブクラスのメンバーとしてローカルに保存できます。

于 2012-08-27T20:41:20.633 に答える
0

いいえ。AsyncTask でブロードキャストを発行し、好きな場所でブロードキャストを処理するだけです。AsyncTask には、渡すことができる this を発行するための Context が必要です。回復できるように、スティッキー ブロードキャストとして発行することをお勧めします。

于 2012-08-27T21:55:45.833 に答える