为什么我的全局变量在AsyncTask之后没有初始化

时间:2013-12-23 18:45:35

标签: java android android-asynctask android-activity

我的班级中有一个名为String authToken的全局变量。在这个类中,我有一个像下面的AsyncTask,onPostExecute方法设置全局变量。

class AuthToken extends AsyncTask<String, String, String> {
    @Override
    protected String doInBackground(String... args) {
        MyAccount myAccount = new MyAccount(getApplicationContext());
        return myAccount.getAuthToken();
    }
    @Override
    protected void onPostExecute(String fetchedToken) {
        authToken = fetchedToken; //assign it to global variable
        Log.d("Inside token: ", authToken);
    }
}

我称之为:

new AuthToken().execute();
Log.d("authToken: ", authToken+""); //print the fetched token

出于某种原因,即使onPostExecute中的日志消息显示了authToken,但是当我打印authToken时调用execute()之后...它没有打印任何内容:

所以在我的日志里,我看到了:

D/Inside token:﹕ 75e7d526-d0eb-4cb2-b294-a57e5dc2e5e4
D/authToken:  ]

问题

为什么我的全局变量不在onPostExecute之后设置?

1 个答案:

答案 0 :(得分:3)

日志没有打印,因为你的asynctask在到达日志行时没有完成。所以你什么也看不见。

你正在设置变量

AsyncTask启动一个新线程,因此在预先形成new AuthToken().execute();之后,它会执行日志。如果它在打印日志之前等待asynctask完成它将失去异步任务的目的