2012-09-02 145 views
1

我想傳遞一個Intent多個數據項:將多個數據傳遞給活動?

if (strActStat == "Sedentary") { 
    // passactStat.putString("keySedentary", strActStat); 
    // passSeden.putString("keyMale", gender); 
    i = new Intent(CalorieTrackerTargetWeight.this, TargetWeightResults.class); 
    i.putExtra("keyGender", gender); 
    i.putExtra("keyAct", strActStat); 
    //i.putExtra("keyAct", strActStat); 

    startActivity(i); 
} 

爲什麼不這項工作?爲什麼我不能在一個Intent中傳遞多個項目?

+0

爲什麼你不能? – Egor

+0

您可以傳遞多個附加內容。 –

+0

其實你正在把2個不同的數據(性別和strActStat)。您不能使用相同的密鑰添加數據! – RvdK

回答

6

您無法將字符串與==進行比較。

if (strActStat.equals("Sedentary")) { // should work 

編輯:

@Hesam寫了一本非常詳細的回答,但他的解決方案是不是真的有用。您應該堅持使用putExtra(key, value),而不是使用ArrayList<String>。爲什麼?那麼有一些優勢在ArrayList的解決方案:

  1. 你不限於該ArrayList
  2. 你不會被強迫保持靜態爲了在你列出的類型。由於您只能使用索引值來獲取列表,因此您需要確保put()的順序與get()的順序相同。想想以下情況:您經常發送3個值,但在某些情況下,您不想發送第二個值。當您使用ArrayList解決方案時,您最終將發送null作爲第二個值,以確保第三個值將保留在他的位置。這是非常混亂的編碼!相反,您應該只發送兩個值,並且當接收活動試圖接收第二個值時,它可以像處理想要的那樣處理返回的空值...例如將其替換爲默認值。
  3. 命名關鍵的將授予您的總是知識知道應該是什麼樣的內部...
  4. key應在接收活動爲常數聲明。所以你總是通過查看這個常量知道這個活動可以處理什麼意圖數據。這是很好的編程!

希望這有助於澄清意圖使用情況。

1

我覺得這不是唯一的問題,第一,if (strActStat == "Sedentary")這是錯誤的。你不能以這種方式比較字符串。因爲通過這種方式,對象不是比較字符串。正確的方法是if (strActStat.equalIgnoreCase("Sedentary"))

如果你使用Parcelable那麼你可以傳遞多個數據只有一個意圖。您可以使用ArrayList<String>。 以下是你需要的代碼的骨架:在適當的地方

test = new ArrayList<String>(); 

項目申報表

private List<String> test; 

初始化列表和添加數據,適當進行測試。

通行證意向如下:

Intent intent = getIntent(); 
intent.putStringArrayListExtra("test", (ArrayList<String>) test); 

檢索數據如下:

ArrayList<String> test = data.getStringArrayListExtra("test"); 

希望有所幫助。

+2

沒有必要Parcelable通過一個意圖傳遞多個值... – WarrenFaith

+0

詳細答案但爲什麼我應該使用ArrayList 和額外開銷創建對象(並解析它們)如果我只能使用'putExtra(key,value)'?另外我有問題,我不能在鍵上進行中繼...檢查我的更新答案的一些優點/缺點 – WarrenFaith

0

試試這個:

done.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
       namevalue=name.getText().toString(); 
       overvalue=over.getText().toString(); 
       audiostatus=audio.getText().toString(); 
       Intent intent=new Intent(Settings.this,home.class); 
       Bundle bundle = new Bundle(); 
       bundle.putString("namevalue",namevalue); 
       bundle.putString("overvalue",overvaluse); 
       bundle.putInt("value",variablename); 
       intent.putExtras(bundle); 
       startActivity(intent);     
       } 
      }); 
0

我面臨同樣的問題。 我的錯誤是我轉移的變量之一未初始化。 像性別strActStat你的情況。

相關問題