2012-06-07 51 views
0

我只是試圖將字符串攜帶到下一個活動,而不必定義任務的整個對象。我見過類似的解決方案,並讓他們工作,但不使用AsyncTask創建意圖。意圖putExtra(字符串,字符串)內AsyncTask

protected void onPostExecute(Boolean result) { 
     if (loggedIn && hasPin) { 

      Intent intent = new Intent(UniteActivity.this, 
        WebViewActivity.class); 
      intent.putExtra(PASSED_USERNAME, passUser); 
      startActivity(intent); 
     } 
     if (loggedIn && !hasPin) { 

      Intent intent = new Intent(UniteActivity.this, 
        CreatePinActivity.class); 
      intent.putExtra(PASSED_USERNAME, passUser); 
      startActivity(intent); 

PASSED_USERNAME是一個公共靜態常量存放的包名,就像putExtra()方法要求。然後我嘗試在下一個活動中將這個值拉出來。

Intent extras = getIntent(); 

      String username = extras.getStringExtra(UniteActivity.PASSED_USERNAME); 

      // carry username to next activity 
      Intent intent = new Intent(CreatePinActivity.this,WebViewActivity.class); 
      intent.putExtra(PASSED_USERNAME, username); 
      startActivity(intent); 

永遠不會有一個字符串拉出,用戶名的值始終爲空。我已經通過調試器,發現Eclipse IDE調試器在活動之間顯示不同的意圖ID,它們從不一致。 AsyncTask是否有可能以某種方式干擾,因爲它分裂成單獨的線程?

+0

什麼是'launchMode'爲你的目標'Activity'? –

+0

我沒有明確地定義它。無論默認是什麼。 –

+1

'AsyncTask'確實不應該有所作爲。你有沒有調試過,以確保你傳入的用戶名(在你把它作爲額外的'Intent'之前)不是空的? – kabuko

回答

0

我不知道這是否適用於你的問題,因爲我不能從您的代碼段查看是否剛創建的或沒有中介活動。

但是getIntent() - 方法始終返回啓動活動的第一個Intent。如果活動保持在後臺並收到新的Intent,則此值不會自動更新。您必須覆蓋onNewIntent(...)並手動撥打setIntent(...)才能正常工作(或直接在那裏完成所有工作)。

所以只爲您不要運行在onCreate()方法您發佈的代碼請檢查您沒有錯過,以獲取真正意圖您感興趣的情況下。

0

不確定您的解決方案的確切答案。 您在UI上調用startActivity,因爲它在postExecute()中。

如果一切都失敗,您可以將該值保存到sharedpreference。

0

您處理變量PASSED_USERNAME的方式似乎不正確。您已經在一些宮殿中使用它作爲簡單的PASSED_USERNAME,而在其他一些地方,您已將它用於名爲前綴UniteActivity.PASSED_USERNAME的類。由於它是一個公共靜態常量,因此始終使用前綴類名稱。