Simple AsyncTask - 返回值null

时间:2013-02-14 12:51:37

标签: java android multithreading

我已经阅读过AsyncTask,我得到了大部分内容,但我仍然有一些问题。

我基本上想要使用线程从在线源检索数据,并将其返回给活动。下面是一个简单的伪代码。

public class register extends Activity implements OnClickListener{

public static String dbData;

     public static void setDBData(String data)
     {
         dbData = data;
     }

   //CALLED FROM ONCREATE()
 public void regPageTwo()
 {
     setContentView(R.layout.layout_register_two);
     new dataExchange().execute(1);
        Log.i("Data", dbData);

 }

}

public class dataExchange extends AsyncTask<Integer, Void, String>{

       @Override
    protected String doInBackground(Integer... params) {
      //EVENTUALLY DO OTHER COMPUTATION
        String test="aTest";
        return test;
    }

    @Override
    protected void onPostExecute(String result)
    {
        register.setDBData(result);
    }
}

(很抱歉格式不佳也不太习惯使用它)。知道dbData为什么总是NULL?

提前致谢

2 个答案:

答案 0 :(得分:1)

 public void regPageTwo()
 {
    setContentView(R.layout.layout_register_two);
    new dataExchange().execute(1);
    Log.i("Data", dbData);
 }

查看上面的代码后,

Log.i("Data", dbData);应位于AsyncTask的onPostExecute() ..

实际上,您的代码行Log.i("Data", dbData);会在完成AsyncTask之前立即执行。所以它总是 NULL 你必须等待完整的AsyncTask。或者我建议将此行放在onPostExecute()

答案 1 :(得分:1)

因为这一行将被执行:

Log.i("Data", dbData);

后立即

new dataExchange().execute(1);

但是这条线将在未来的某个时间执行:

register.setDBData(result);

会发生这种情况,因为它在另一个主题上运行 asynchronously