我试图修复此代码:
public class Async_Test extends AsyncTask<String, String, String> {
private String Response;
@Override
protected String doInBackground(String... params)
{
String tmp = "something";
return tmp;
}
@Override
protected void onPostExecute(String result) {
Response = result;
}
public String getResponse()
{
return this.Response;
}
}
问题如下:getResponse()方法始终为null。
执行代码:
public void onClick(View v) {
try{
Async_Test t = new Async_Test();
t.execute("");
showMainText("res: "+t.getResponse());
} catch(Exception e)
{
showMainText(e.toString());
}
}
答案 0 :(得分:1)
异步任务是异步的。更准确地说,这是当你调用execute()
方法时发生的事情:
doInBackground(...)
在此新线程上执行doInBackground(...)
终止时:onPostExecute
在主线程上执行。因此,当您致电showMainText("res: "+t.getResponse());
时(它位于主线程中):onPostExecute
尚未运行且Response
仍为空。
要查看AsyncTask的效果:您可以在线上设置断点:
showMainText("res: "+t.getResponse());
你将看到显示的文本将是“某事”(由于断点:AsyncTask将有时间执行。)
要获得您期望的结果:在showMainText("res: "+t.getResponse());
onPostExecute
行