0

次のスニペット:

public class ExternalClass {
    private int num = 1;

    public void backgroundTask() {
        new HttpTask().execute();
    }

    public int getNum() {
        return num;
    }

    private class HttpTask extends AsyncTask<String, Void, String> {

        @Override
        protected String doInBackground(String... params) {
            //Do stuff...
        }

        @Override
        protected void onPostExecute(String result) {
            //Do stuff...
            ExternalClass.this.num = 2;
    }
}

アクティビティ内:

...
ExternalClass ec = new ExternalClass();
ec.backgroundTask();
int myNum = ec.getNum(); //NUM IS 1, NOT 2!!

私は何が間違っているのですか?すべてが正常に機能し、doInBackground()とonPostExecute()は正常に完了しますが、フィールド「num」は変更されません。「num=2」または「this.num=2」を試しました(正しくないことはわかっていますが...)。

4

1 に答える 1

1

実行が完了し たら、 AsyncTask.get()メソッドを使用して、AsyncTask からメイン UI スレッドに結果を戻す 必要があります。doInBackground()

public void backgroundTask() {
        new HttpTask().execute().get();
    }

注:メイン UI スレッドで AsyncTask の get() メソッドを呼び出すと、 Main Thread の実行が停止します。backgroundTask()バックグラウンドスレッドからメソッドを呼び出す必要があります

于 2013-02-07T13:26:25.770 に答える