Android intent.getStringExtra()奇怪的行为

时间:2012-07-22 08:47:59

标签: android android-intent broadcastreceiver

我正在将String个额外内容传递给发送到Intent的{​​{1}},并将其取为:

BroadCastReceiver

此代码为我提供了以下输出(如预期的那样):

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

不期望的是第二个if语句永远不会匹配,即使07-22 10:41:00.038: I/Listener(28678): :start: 明确设置正确。我已经看过几次了,这真让我烦恼。这种行为看起来很奇怪,据我所知,我正在以正确的方式接近这一点。

有人有任何想法吗?

2 个答案:

答案 0 :(得分: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了解更多信息。

答案 1 :(得分:2)

String不是原始数据类型,因此您不能使用==运算符来比较其中两个。相反,请尝试使用:

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

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