2013-12-23 102 views
-1

我在我的類中有一個名爲String authToken的全局變量。在這個類中,我有一個如下所示的AsyncTask和設置全局變量的onPostExecute方法。爲什麼我的全局變量未在AsyncTask後初始化

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 ......不打印輸出:

所以在我的日誌,我看到:

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

問題

爲什麼我的全局變量在onPostExecute之後設置?

回答

3

該日誌不會打印任何內容,因爲您的asynctask在到達日誌行時沒有完成。所以你什麼也看不到。

你變量被設置雖然

的AsyncTask啓動一個新的線程,以便之後預製件new AuthToken().execute();它的日誌。如果它在打印日誌之前等待asynctask完成,它會打敗異步任務的目的。

+0

我明白了。但是,那麼我該如何做這樣的事情:在我的主要活動中,我想獲取authToken,並在獲取它之後,我想查看它是否已設置(使用'if'條件)。如果是 - 則繼續,如果不是 - 則顯示日誌不活動。 .... – birdy

+1

在你的'onPostExecute'中用你的令牌做任何事情,這是知道你的任務完成的唯一方法。設置一個回調或者其他的東西來表明你的onPostExecute是否有令牌 – tyczj