从NFC收到的NDEF消息中获取文本

时间:2015-12-03 11:53:02

标签: java android nfc ndef nfc-p2p

我需要一些帮助来处理NFC收到的数据。我正在使用this code通过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
}

有人可以就此提出一些建议吗?

2 个答案:

答案 0 :(得分:3)

也许数据发生了变化:为什么不尝试:

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 :(得分:0)

你的代码没有多大意义。

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

    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的整数。这没有任何意义。

  4. 相反,您希望将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();