2012-07-24 65 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