2015-12-03 2 views
-2

Мне нужна помощь в обработке данных, полученных NFC. Я использую this code для получения сообщения NDEF по NFC и отображения текста, содержащегося в записи NDEF, в тосте.Получить текст из сообщения NDEF, полученного по NFC

Теперь я хочу заполнить полученные данные в поле 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

Возможно, данные изменились: почему не вы попробовать:

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 
} 
0

Ваш код не имеет особого смысла.

  1. Вы используете equals() метод на строковое представление значения editText поля без проверки возвращаемого значения:

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

    Поскольку метод equals() не изменяет состояние объекта (и на самом деле вы выбрасываете этот строковый объект в любом случае), вызов этого метода имеет смысл только в том случае, если вы проверите его возвращаемое значение (которое скажет вам, соответствует ли строковое значение в editText значению ...getPayload()[0]). Однако, поскольку getPayload()[0] является байтовым значением, метод equals() будет всегда return false. Следовательно, вы можете удалить эту строку кода.

  2. ndefMessage.getRecords()[0].getPayload()[0] дает вам первый байт полезной нагрузки этой записи NDEF. Таким образом, это только первый символ (или, как кажется, вы используете кодировку UTF-8, возможно, даже только часть первого символа).

  3. Когда вы используете значение байта ndefMessage.getRecords()[0].getPayload()[0] в качестве параметра для метода editText.setText(x), оно будет рассматриваться как целое число, указывающее идентификатор ресурса. Это не имеет никакого смысла.

Так вместо этого, вы хотели бы, чтобы преобразовать полезную нагрузку записи ЦНК в строку (используя по умолчанию UTF-8 кодировки кодировку):

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

Вы можете назначить это строковое значение editText:

editText.setText(text); 

Это так же, как вы уже делаете при установке сообщение о тосте:

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

 Смежные вопросы

  • Нет связанных вопросов^_^