неожиданный текст из тега NFC - PullRequest
0 голосов
/ 12 декабря 2018

Я делаю приложение с NFC впервые.В моем теге у меня есть данные MimeType типа записи (application / json
Данные: «Мой текст»).

Это мой код:

private fun processIntent(checkIntent: Intent) {

    if (checkIntent.action == NfcAdapter.ACTION_NDEF_DISCOVERED) {

        // pobieranie wiadomości NDEF z taga NFC
        val rawMessages = checkIntent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES)

        // wiadomość NDEF zawiera wszystkie rekordy z tagu NFC
        var ndefMsg = rawMessages[0] as NdefMessage

        // pojedynczy 1 rekord z tagu NFC ( indeks 0 to 1 rekord, indeks 1 to 2 rekord itd. )
        var ndefRecord = ndefMsg.records[0]

        // jeśli 1 rekord nie jest pusty to pobierz PAYLOAD ( dane ) i wyświetl go
        // jeśli 1 rekord jest pusty wyświetl błąd
        if(ndefRecord.toMimeType() != null)
        {
            Log.v("processIntent", ndefRecord.payload.toString())
            var payload = ndefRecord.payload.toString()


            textView.text = payload
            var i = 2
        }
        else
        {
            Log.e("processIntent", "ERROR A1")
        }

    }
}

В LogCat у меня естьthis:

V/processIntent: [B@82162f9

Как я могу сделать свое текстовое сообщение из этого (должно быть "Мой текст")?

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

например:

if (rawMessages != null) {
    val messages = arrayOfNulls<NdefMessage?>(rawMessages.size)
    for (i in rawMessages.indices) {
        messages[i] = rawMessages[i] as NdefMessage;
    }         
    processNdefMessages(messages)
}

и:

private fun processNdefMessages(ndefMessages: Array<NdefMessage?>) {
    for (curMsg in ndefMessages) {
        if (curMsg != null) {

            logMessage("Message", curMsg.toString())
            logMessage("Records", curMsg.records.size.toString())

            for (curRecord in curMsg.records) {
                if (curRecord.toUri() != null) {
                    logMessage("- URI", curRecord.toUri().toString())
                } else {
                    logMessage("- Contents", curRecord.payload.contentToString())
                }
            }
        }
    }
}
0 голосов
/ 13 декабря 2018

В этом случае ndefRecord.payload - это ByteArray, поэтому вы видите распечатку по умолчанию типа Object ([B для байтового массива; @82162f9 для адреса памяти).

Вам нужно будет преобразовать его в String.Это зависит от того, как закодированы данные тега, который будет зависеть от создателя тега.Однако, если предположить, что это UTF-8 или ASCII, вы можете просто использовать конструктор String:

val payloadString = String(ndefRecord.payload, StandardCharsets.US_ASCII)
val payloadString = String(ndefRecord.payload, StandardCharsets.UTF_8)
...