Java 如何从内部AsyncTask类的onPostExecute方法修改外部字段?

Java 如何从内部AsyncTask类的onPostExecute方法修改外部字段?,java,android,android-asynctask,Java,Android,Android Asynctask,在以下代码段中: public class ExternalClass { private int num = 1; public void backgroundTask() { new HttpTask().execute(); } public int getNum() { return num; } private class HttpTask extends AsyncTask<String, V

在以下代码段中:

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;
    }
}
我做错了什么?一切正常,我的doInBackground()和onPostExecute()成功完成,但字段“num”没有改变。我尝试了“num=2”甚至“this.num=2”(我知道不正确,但是…。

doInBackground()执行完成时,您需要使用方法从AsyncTask的主UI线程中获取结果

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

注意:在主UI线程中调用AsyncTask的get()方法时,将停止主线程的执行。您将需要从后台线程调用
backgroundTask()
方法

onPostExecute
将在
doInBackground
之后被激发,因此,调用
ec.getNum()
将永远不会将
myNum
显示为2。登录到
onPostExecute
并检查值,您将看到它是2。谢谢!(还要感谢@Android开发者)。我想我现在明白它是怎么工作的了。最后,我将使用这个解决方案:
public void backgroundTask() {
        new HttpTask().execute().get();
    }