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() 方法时,这将停止主线程的执行。您将需要backgroundTask()从后台线程调用方法

于 2013-02-07T13:26:25.770 回答