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();
}