2012-07-22 18 views
0

我傳遞String額外的到被髮送到BroadCastReceiver一個Intent,並獲取他們喜歡:的Android intent.getStringExtra()怪異的行爲

public void onReceive(Context context, Intent intent) { 
    if (intent.hasExtra("type")){ 
     Log.i("Listener", ":"+intent.getStringExtra("type")+":"); 

     if (intent.getStringExtra("type") == "start"){ 
      Log.i("Listener", "start"); 
     } 
     if (intent.getStringExtra("type") == "end"){  
      Log.i("Listener", "end"); 
     } 
    } 
}//end method 

這段代碼給我下面的輸出(如預期):

07-22 10:41:00.038: I/Listener(28678): :start: 

預計不會有什麼是第二個if語句永遠不匹配,即使type顯然是正確設置。我已經看過幾次了,這實在讓我很煩惱。就我所知,這種行爲似乎很奇怪,我正以正確的方式接近這一點。

任何人有任何想法?

回答

3

對於String比較使用equals()而不是==

變化:

if (intent.getStringExtra("type") == "start") 
{ 
     Log.i("Listener", "start"); 
} 
if (intent.getStringExtra("type") == "end") 
{  
    Log.i("Listener", "end"); 
} 

if (intent.getStringExtra("type").equals("start")){ 
      Log.i("Listener", "start"); 
     } 
     if (intent.getStringExtra("type").equals("end")){  
      Log.i("Listener", "end"); 
     } 

this詢問。

+0

不能接受的是,但是這確實的伎倆。 現在,我覺得這樣的菜鳥,哈哈。謝謝您的幫助。 – slinden77 2012-07-22 08:56:07

2

字符串不是原始數據類型,因此您不能使用==運算符來比較它們中的兩個。相反,嘗試使用:

if (intent.getStringExtra("type").equals("start")){ 

if (intent.getStringExtra("type").equals("end")){