2012-07-24 43 views
0

我误解了我的原始问题作为转换之一,当它是一个FormatException。我试图根据EditText输入写一个NFC标签。相关代码如下:当创建NdefMessage时的FormatException

EditText msgInput = (EditText) findViewById(R.id.editText1); 

... 

try { 
    String msg = msgInput.getText().toString(); 
    byte[] bytes = msg.getBytes(); 
    messagePayload = bytes; 
} 

... 

NdefMessage message; 
try { 
message = new NdefMessage(messagePayload); 
} catch (FormatException e) { 
// ups, illegal ndef message payload 
Log.e(TAG, "Format exception from illegal ndef message payload"); 

return; 
} 

它总是抛出FormatException。我不知道为什么。我只是想写'xyz'或'东西'或类似的东西。我确保我从Log语句中获得正确的字节。

+0

NDEF格式的NFC标签? – CommonsWare 2012-07-24 17:20:14

+0

是的。对不起,应该在上面的帖子中澄清一下。我可以写它与其他应用程序也没有问题。 – alextoombs 2012-07-24 17:22:39

+0

我建议您使用带有NdefRecord对象的'NdefMessage'构造函数,并且创建适当的'NdefRecord'对象以与该构造函数一起使用。现在,你假设你可以把随机的东西放在NDEF标签中,我认为这不是准确的。 – CommonsWare 2012-07-24 17:31:38

回答

1

只给出字符串的字节不是有效的NdefMessage有效载荷。这就是为什么你会得到一个例外。为了构建正确的NdefMessage与根据NFC论坛的标准使用此代码格式化一个文本记录:

  String msg = msgInput.getText().toString(); 
    byte[] languageCode; 
    byte[] msgBytes; 
    try { 
     languageCode = "en".getBytes("US-ASCII"); 
     msgBytes = msg.getBytes("UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     return; 
    } 

    byte[] messagePayload = new byte[1 + languageCode.length 
      + msgBytes.length]; 
    messagePayload[0] = (byte) 0x02; // status byte: UTF-8 encoding and 
             // length of language code is 2 
    System.arraycopy(languageCode, 0, messagePayload, 1, 
      languageCode.length); 
    System.arraycopy(msgBytes, 0, messagePayload, 1 + languageCode.length, 
      msgBytes.length); 

    NdefMessage message; 
    NdefRecord[] records = new NdefRecord[1]; 
    NdefRecord textRecord = new NdefRecord(NdefRecord.TNF_WELL_KNOWN, 
      NdefRecord.RTD_TEXT, new byte[]{}, messagePayload); 
    records[0] = textRecord; 
    message = new NdefMessage(records); 

有关NDEF协议的更多细节,请参阅本文档: https://engineering.purdue.edu/477grp14/Specs/NFC/NDEFTECH.pdf

有关详细信息对文本RTD看看这个: http://www.maintag.fr/fichiers/pdf-fr/nfcforum-ts-rtd-text-1-0.pdf