if 语句不适用于字符串
if statement doesn't work for string
在我的项目中,我读取了 NFC 标签中的文本,并将其保存为字符串值。如果 string value == given string ,则执行某些操作。
这是我的代码:
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
if(nfcTag==null){
Toast.makeText(context, "Lütfen NFC Etiketini Okutunuz", Toast.LENGTH_SHORT).show();
}else{
nfcString = read(nfcTag); // this is the part i get the text with read function. i already define nfcString as String.
}
} catch (IOException e) {
e.printStackTrace();
}
textViewName.setText(nfcString); // it is working fine !
String salak = textViewName.getText().toString();
// i created new String because, i tried to get textViewName.getText().toString() , i tought it should be work, but it didn't
try {
// this is the if statement which doesn't work..
if ( salak == getName(position) ) {
// i also tried
// nfcString == getName(position)
// nfcString.toString() == getName(position).toString()
// position thing is about spinner. i use spinner, it works fine also..
btn.setText("Girdin!");
yoklamaSend(getDersid(position));
} else
Toast.makeText(context, "DERS GİRDİSİ BAŞARISIZ", Toast.LENGTH_LONG).show();
}
catch (Exception ee) {
ee.printStackTrace();
}
}
});
我不明白为什么它不起作用。 NFC 标签工作正常,但无论我做什么,我都无法 运行 if 语句。
我从不同应用程序的示例中获取了 NFC 标签读取代码(工作正常),这里是:
private String read(Tag tag) throws UnsupportedEncodingException {
Ndef ndef = Ndef.get(tag);
NdefMessage ndefMessage = ndef.getCachedNdefMessage();
NdefRecord[] records = ndefMessage.getRecords();
for (NdefRecord ndefRecord : records) {
if (ndefRecord.getTnf() == NdefRecord.TNF_WELL_KNOWN && Arrays.equals(ndefRecord.getType(), NdefRecord.RTD_TEXT)) {
try {
byte[] payload = ndefRecord.getPayload();
String textEncoding = ((payload[0] & 128) == 0) ? "UTF-8" : "UTF-16";
int languageCodeLength = payload[0] & 0063;
return new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
} catch (UnsupportedEncodingException e) {
Log.e("TAG", "Unsupported Encoding", e);
}
}
}
return null;
}
比较字符串的正确方法是 .Equals(String)
.
使用==
比较来查看它们是否是内存中的同一个对象
查看这些链接:
https://docs.oracle.com/javase/tutorial/java/data/comparestrings.html
How do I compare strings in Java?
Java String.equals versus ==
使用 equals
函数而不是 ==
运算符来比较 String
。 ==
运算符检查两个操作数是否相同 object
。
例如,使用 salak.equals(getName(position))
而不是 salak == getName(position)
尝试在 if
语句中使用 equals()
方法而不是 ==
。