我需要一些帮助来处理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
}
有人可以就此提出一些建议吗?
答案 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)
你的代码没有多大意义。
您对equals()
字段值的字符串表示使用editText
方法,而不检查返回值:
editText.getText().toString().equals(ndefMessage.getRecords()[0].getPayload()[0]);
由于equals()
方法不会改变对象的状态(事实上你还是扔掉了那个字符串对象),调用这个方法只有在检查它的返回值时才会有意义(这会告诉你是否editText
中的字符串值与...getPayload()[0]
的值匹配。但是,由于getPayload()[0]
是字节值,equals()
方法将始终返回false
。因此,您可以放弃这行代码。
ndefMessage.getRecords()[0].getPayload()[0]
为您提供该NDEF记录的有效负载的第一个字节。因此,这只是第一个字符(或者你似乎使用UTF-8编码,甚至可能只是第一个字符的一部分)。
当您使用字节值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();