Android异步类返回null

时间:2015-05-23 21:03:08

标签: java android asynchronous null

我试图修复此代码:

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

1 个答案:

答案 0 :(得分:1)

异步任务是异步的。更准确地说,这是当你调用execute()方法时发生的事情:

  • 创建了一个新线程。
  • doInBackground(...)在此新线程上执行
  • doInBackground(...)终止时:onPostExecute在主线程上执行。

因此,当您致电showMainText("res: "+t.getResponse());时(它位于主线程中):onPostExecute尚未运行且Response仍为空。

要查看AsyncTask的效果:您可以在线上设置断点:

showMainText("res: "+t.getResponse());

你将看到显示的文本将是“某事”(由于断点:AsyncTask将有时间执行。)

要获得您期望的结果:在showMainText("res: "+t.getResponse());

中移动onPostExecute