0

私は Asynctask を使用して、特にdoStuff()グローバル データ構造を割り当てる時間のかかるメソッドを実行しています。デバッガーはそれdoStuff()が呼び出されたことを確認しますが、Asynctask の最後に新しいビューが描画されると、グローバル データ構造へのアクセス中に null ポインター例外が発生します。コードは次のとおりです。

public class MyTask extends AsyncTask<Void, Void, Void> {
    protected ProgressDialog dialog;

    public MyTask (Context context) {
        dialog = new ProgressDialog(context);
    }

    @Override
    protected void onPreExecute() { 
       super.onPreExecute();
       dialog.setMessage("Foo");
       dialog.show();    
    }

    @Override
    protected Void doInBackground(Void... params) {
        doStuff();
        return null;
    }

    @Override
    protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        dialog.dismiss();
    }
}

を使用して、複数のアクティビティから Asynctask を実行しnew MyTask(this).execute();ます。

4

2 に答える 2

2

AsyncTaskバックグラウンド スレッドとハンドラーの便利なラッパーです。バックグラウンド タスクが完了する前にコードを実行しています。バックグラウンド タスクがいつ終了したかを知るには、実行するコードを配置するかonPostExecute、タスクが完了したことをメイン アクティビティ (UI/メイン スレッドで実行) に通知する必要があります。詳細については、「プロセスとスレッド ガイド」の「AsyncTask の使用」セクションを参照してください。

于 2013-01-13T04:15:19.840 に答える
0

AsyncTask を使用しているアクティビティで ProgressDialog を宣言する必要があります

于 2013-01-13T01:54:30.547 に答える