0

MainActivity とは別の AsyncTask クラスがあります。

protected void onPostExecute(ArrayList<String> result) {
          System.out.println("flag1");
          MainActivity.myLst=new ArrayList<String>();
          MainActivity.myLst=result;
}

次に、MainActivity に次のコードがあります。

public void onCreate(Bundle savedInstanceState) {
    new AsyncTask().execute();
    System.out.println("flag2");
    System.out.println(myLst.size());
}

プログラムは最初に flag2 を出力し、myLst.size は 0 です。他のアクティビティに否定的である場合、メイン アクティビティに戻り、myList.size が正しいサイズになります。すべてを出力し、MainActivity の前に AsyncTask で作業を行うべきだと思いました。

4

5 に答える 5

3

AsyncTaskは「MainActivity の前に処理を実行」しません。これは、の目的を無効にしますAsyncTask

あなたがしたいことは、アクティビティに値を返すためのインターフェイスを作成することです。この回答には、その良い例があります。

于 2013-08-01T14:27:14.367 に答える
1

他の人が言ったように、あなたの投稿へのコメントで私が言ったように、非同期は非同期を意味し、あなたの場合、非同期タスクを完了する前におそらく onCreate コードを終了することを意味します。

AsyncTask クラスを MainActivity 内に配置する (そして PostExecute で出力するメソッドを呼び出す) か、アクティビティに Observing/Observer スタイルを実装して、非同期タスクが終了したことをメイン アクティビティに通知できるようにします。

于 2013-08-01T14:31:57.087 に答える