我是编程新手,所以请耐心等待。在我做了一个SMS应用程序的几个教程后,我想在收到特定文本时执行特定任务,我通过将收到的文本与我已声明的值(代码)进行比较来完成此操作。问题是这种情况从未发生过。
public class SmsReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
//---get the SMS message passed in---
Bundle bundle = intent.getExtras();
SmsMessage[] msgs = null;
String str = "";
String code = "blue";
String conf = "Ok";
String inv = "Invalid";
if (bundle != null)
{
//---retrieve the SMS message received---
Object[] pdus = (Object[]) bundle.get("pdus");
msgs = new SmsMessage[pdus.length];
for (int i=0; i<msgs.length; i++){
msgs[i] = SmsMessage.createFromPdu((byte[])pdus[i]);
str = msgs[i].getMessageBody().toString();
//n = Integer.parseInt(str);
}
if (str == code)
Toast.makeText(context, conf, Toast.LENGTH_SHORT).show();
else
//str = Integer.toString(n);
//Toast.makeText(context, str, Toast.LENGTH_SHORT).show();
Toast.makeText(context, inv, Toast.LENGTH_SHORT).show();
}
}
}
当我发送消息时,它总是显示inv变量(无效)。我试图将“code”变量更改为整数,然后解析字符串以便我可以比较它;在这种情况下它确实有效,但每当我收到一个字符串消息时,应用程序崩溃。我认为这应该是一件简单的事情,但由于我不完全理解java,我无法弄明白。 我希望你能提供一些关于我能做什么的指导或建议。 提前谢谢。
答案 0 :(得分:4)
比较两个字符串时,您应该使用:
if (str.equals(code))
Java不会像对连接一样覆盖字符串相等性测试的equals运算符。
如果两个String变量都引用内存中的EXACT相同对象,则测试str == code
仅计算结果为真。
答案 1 :(得分:0)
String str1 =“hello”;
String str2 =“world”;
if(str1 == str2)//不适用于字符串,可用于整数
if(str1.equals(str2))//适用于字符串
if(str1.compareTo(str2)&gt; 0)//适用于字符串