NFC 卡 reader 出现错误 android
NFC card reader getting error android
正在尝试使用此读取 NFC 卡 -
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
if ("text/plain".equals(type)) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
NdefMessage[] msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
NdefMessage msg = msgs[0];
try {
byte[] payload = msg.getRecords()[0].getPayload();
String textEncoding = ((payload[0] & 0200) == 0) ? String.valueOf(R.string.utf_8) : String.valueOf(R.string.utf_16);
int languageCodeLength = payload[0] & 0077;
String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
Log.d("reader", "Language code:" + languageCode);
//Get the Text
String text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
textViewLastResult.setText(text);
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
//textViewLastResult.setText("Wrong mime type: " + type);
}
}
我在 -
行中收到错误
String text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
W/System.err: java.io.UnsupportedEncodingException: 2131099684
10-27 21:41:52.606 7804-7804/com.geniuslead.attendance W/System.err: at java.nio.charset.Charset.forNameUEE(Charset.java:316)
10-27 21:41:52.606 7804-7804/com.geniuslead.attendance W/System.err: at java.lang.String.(String.java:223)
10-27 21:41:52.606 7804-7804/com.geniuslead.attendance W/System.err: at com.geniuslead.attendance.ui.ReadCardActivity.resolveIntent(ReadCardActivity.java:198)
如果我没看错的话,你是从字符串资源中拿来编码的。相反,尝试使用这样的东西(取决于版本):
String text = "";
if ((payload[0] & 0200) == 0) text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, StandardCharsets.UTF_8);
else text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, StandardCharsets.UTF_16);
这是我的错误,我 String.valueOf(R.string.utf_8)
拒绝了。可能是字符串 ID。我硬编码了 "UTF-8" 现在可以使用了..
正在尝试使用此读取 NFC 卡 -
if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
if ("text/plain".equals(type)) {
Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
if (rawMsgs != null) {
NdefMessage[] msgs = new NdefMessage[rawMsgs.length];
for (int i = 0; i < rawMsgs.length; i++) {
msgs[i] = (NdefMessage) rawMsgs[i];
}
NdefMessage msg = msgs[0];
try {
byte[] payload = msg.getRecords()[0].getPayload();
String textEncoding = ((payload[0] & 0200) == 0) ? String.valueOf(R.string.utf_8) : String.valueOf(R.string.utf_16);
int languageCodeLength = payload[0] & 0077;
String languageCode = new String(payload, 1, languageCodeLength, "US-ASCII");
Log.d("reader", "Language code:" + languageCode);
//Get the Text
String text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
textViewLastResult.setText(text);
} catch (Exception e) {
e.printStackTrace();
}
}
} else {
//textViewLastResult.setText("Wrong mime type: " + type);
}
}
我在 -
行中收到错误String text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, textEncoding);
W/System.err: java.io.UnsupportedEncodingException: 2131099684 10-27 21:41:52.606 7804-7804/com.geniuslead.attendance W/System.err: at java.nio.charset.Charset.forNameUEE(Charset.java:316) 10-27 21:41:52.606 7804-7804/com.geniuslead.attendance W/System.err: at java.lang.String.(String.java:223) 10-27 21:41:52.606 7804-7804/com.geniuslead.attendance W/System.err: at com.geniuslead.attendance.ui.ReadCardActivity.resolveIntent(ReadCardActivity.java:198)
如果我没看错的话,你是从字符串资源中拿来编码的。相反,尝试使用这样的东西(取决于版本):
String text = "";
if ((payload[0] & 0200) == 0) text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, StandardCharsets.UTF_8);
else text = new String(payload, languageCodeLength + 1, payload.length - languageCodeLength - 1, StandardCharsets.UTF_16);
这是我的错误,我 String.valueOf(R.string.utf_8)
拒绝了。可能是字符串 ID。我硬编码了 "UTF-8" 现在可以使用了..