我的班级中有一个名为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
之后设置?
答案 0 :(得分:3)
日志没有打印,因为你的asynctask在到达日志行时没有完成。所以你什么也看不见。
你正在设置变量
AsyncTask启动一个新线程,因此在预先形成new AuthToken().execute();
之后,它会执行日志。如果它在打印日志之前等待asynctask完成它将失去异步任务的目的