簡體   English   中英

從通過NFC接收的NDEF消息中獲取文本

[英]Get text from NDEF message received over NFC

在處理NFC收到的數據時,我需要一些幫助。 我正在使用此代碼通過NFC接收NDEF消息,並在烤面包中顯示NDEF記錄中包含的文本。

現在,我想將接收到的數據填充到EditText字段中。 現在,它只是顯示接收到的數據一段時間(作為吐司)。 我試圖更改代碼,但未成功:

void parseNdefMessage(Intent intent) {
    Parcelable[] ndefMessageArray = intent.getParcelableArrayExtra(
            NfcAdapter.EXTRA_NDEF_MESSAGES);
    NdefMessage ndefMessage = (NdefMessage) ndefMessageArray[0];
    Toast.makeText(this, new String(ndefMessage.getRecords()[0].getPayload()), Toast.LENGTH_LONG).show();
    Toast.makeText(
        getApplicationContext(),"Here is my text", 
        Toast.LENGTH_LONG).show();
    editText.getText().toString().equals(ndefMessage.getRecords()[0].getPayload()[0]);
    //editText = (EditText) findViewById(R.id.editText);
    //String text = editText.getText().toString();
    editText.setText(ndefMessage.getRecords()[0].getPayload()[0]); //my attempt to set my received data to "editText" field
}

有人可以為此提供一些建議嗎?

也許數據已更改:為什么不嘗試:

void parseNdefMessage(Intent intent) {
    Parcelable[] ndefMessageArray = intent.getParcelableArrayExtra(
            NfcAdapter.EXTRA_NDEF_MESSAGES);
    NdefMessage ndefMessage = (NdefMessage) ndefMessageArray[0];
    String msg = new String(ndefMessage.getRecords()[0].getPayload());
    Toast.makeText(this, msg, Toast.LENGTH_LONG).show();
    Toast.makeText( getApplicationContext(),"Here is my text", 
        Toast.LENGTH_LONG).show();

    //editText = (EditText) findViewById(R.id.editText);
    //String text = editText.getText().toString();
    editText.setText(msg); //my attempt to set my received data to "editText" field
}

您的代碼沒有多大意義。

  1. 您對editText字段的值的字符串表示形式使用equals()方法,而不檢查返回值:

     editText.getText().toString().equals(ndefMessage.getRecords()[0].getPayload()[0]); 

    由於equals()方法不會更改對象的狀態(並且實際上您還是丟棄了該字符串對象),因此僅當檢查其返回值時才調用此方法(它會告訴您是否editText的字符串值) editText...getPayload()[0]的值匹配。 但是,由於getPayload()[0]是字節值,所以equals()方法將始終返回false 因此,您可以刪除此行代碼。

  2. ndefMessage.getRecords()[0].getPayload()[0]為您提供該NDEF記錄的有效負載的第一個字節。 因此,這只是第一個字符(或者您似乎使用UTF-8編碼,甚至可能只是第一個字符的一部分)。

  3. 當使用字節值ndefMessage.getRecords()[0].getPayload()[0]作為方法editText.setText(x) ,它將被視為指示資源ID的整數。 這沒有任何意義。

因此,您需要將NDEF記錄的有效負載轉換為字符串(使用默認的UTF-8字符集編碼):

String text = new String(ndefMessage.getRecords()[0].getPayload());

然后可以將該字符串值分配給editText

editText.setText(text);

這與設置吐司消息時已經做的相同:

Toast.makeText(this,
               new String(ndefMessage.getRecords()[0].getPayload()),   <---  
               Toast.LENGTH_LONG).show();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM