在以下代码 fragment 中:
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;
}
}
在 Activity 中:
...
ExternalClass ec = new ExternalClass();
ec.backgroundTask();
int myNum = ec.getNum(); //NUM IS 1, NOT 2!!
我做错了什么?一切正常,我的 doInBackground() 和 onPostExecute() 成功完成,但字段“num”没有改变。我尝试了“num = 2”甚至“this.num = 2”(我知道这是不正确的,但是......)。
最佳答案
您将需要使用AsyncTask.get()当 doInBackground()
执行完成时,从 AsyncTask 返回主 UI 线程结果的方法
public void backgroundTask() {
new HttpTask().execute().get();
}
注意:当您在主 UI 线程中调用 AsyncTask 的 get() 方法时,这将停止主线程的执行。您需要从后台线程调用 backgroundTask()
方法
关于java - 如何从内部 AsyncTask 类的 onPostExecute 方法修改外部字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752109/