【问题标题】:Get text from NDEF message received over NFC从通过 NFC 接收的 NDEF 消息中获取文本
【发布时间】:2015-12-03 11:53:02
【问题描述】:

我需要一些帮助来处理 NFC 接收到的数据。我正在使用this code 通过 NFC 接收 NDEF 消息,并在 toast 中显示 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
}

有人可以给点建议吗?

【问题讨论】:

    标签: java android nfc ndef nfc-p2p


    【解决方案1】:

    也许数据变了:你为什么不试试:

    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
    }
    

    【讨论】:

      【解决方案2】:

      您的代码没有多大意义。

      1. 你在editText字段的值的字符串表示上使用equals()方法而不检查返回值:

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

        由于equals() 方法不会改变对象的状态(事实上你还是扔掉了那个字符串对象),调用这个方法只有在你检查它的返回值时才有意义(它会告诉你字符串是否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 的消息时所做的一样:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多