[英]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
}
您的代碼沒有多大意義。
您對editText
字段的值的字符串表示形式使用equals()
方法,而不檢查返回值:
editText.getText().toString().equals(ndefMessage.getRecords()[0].getPayload()[0]);
由於equals()
方法不會更改對象的狀態(並且實際上您還是丟棄了該字符串對象),因此僅當檢查其返回值時才調用此方法(它會告訴您是否editText
的字符串值) 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.makeText(this,
new String(ndefMessage.getRecords()[0].getPayload()), <---
Toast.LENGTH_LONG).show();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.