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" 现在可以使用了..