我想将String sms电话号码(传入短信)与String Studentno(变量)匹配。如果成功,我如何匹配并通知弹出消息。这是我的代码:
public void onReceive( Context context, Intent intent )
{
// Get SMS map from Intent
Bundle extras = intent.getExtras();
String messages = "";
String address = "";
String studentsno = "+0999234678";
String no;
if ( extras != null )
{
// Get received SMS array
Object[] smsExtra = (Object[]) extras.get( SMS_EXTRA_NAME );
// Get ContentResolver object for pushing encrypted SMS to incoming folder
ContentResolver contentResolver = context.getContentResolver();
for ( int i = 0; i < smsExtra.length; ++i )
{
SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);
String body = sms.getMessageBody().toString();
address = sms.getOriginatingAddress();
messages += "SMS from " + address + " :\n";
messages += body + "\n";
no = sms.getOriginatingAddress().toString();
// Here you can add any your code to work with incoming SMS
if(no == studentsno){
Toast.makeText( context, "SUCCESS", Toast.LENGTH_LONG ).show();
}
// I added encrypting of all received SMS
putSmsToDatabase( contentResolver, sms );
}
// Display SMS message
Toast.makeText( context, messages, Toast.LENGTH_SHORT ).show();
}
}
这是我的问题。如何匹配2个字符串以显示弹出消息? :
if(no == studentsno){
Toast.makeText( context, "SUCCESS", Toast.LENGTH_LONG ).show();
}
答案 0 :(得分:0)
尝试
if(no.equals(studentsno))
而不是
if(no == studentsno)
编辑:长话短说, String.equals()将比较给定字符串的值是否相等(这是您所需要的)。
== 将检查比较对象是否指向完全相同的String对象。因此,即使比较字符串具有相同的值,它们不引用相同的String对象。
答案 1 :(得分:0)
在Java中,所有字符串都是对象。将==
运算符与对象一起使用时,正在测试两个对象是否是同一个对象。
由于string interning
,字符串可能是同一个对象,但通常不是,并且您无法对此产生影响。
Java Object
类实现了一个equals方法,它只测试两个对象是否是同一个对象。从Object
继承的任何类都可以重写此方法以提供它自己的相等性测试。 string
通过覆盖equals
方法来测试两个字符串(相同的对象或不同的对象,无关紧要)是否包含相同的内容。
因此,在测试两个字符串是否具有相同内容时,您应该使用string1.equals(string2)
。