Nexus S: запись меток MifareClassic NFC завершается неудачно, когда не в режиме отладки - PullRequest
1 голос
/ 26 июня 2011

У меня странная проблема. Когда я отлаживаю свою программу и устанавливаю точку останова перед командой writeBlock для записи моей карты MifareClassic, все идет хорошо. Карта написана, и моя программа продолжается.
Если я удаляю точку останова, я получаю «IO Exception: transceived failed»! Я вернул точку останова без изменения моего кода, он снова работает!

Я заблудился ... Возможно ли, что проблема в скорости выполнения программы? Наличие точки останова замедляет выполнение ...

Вот мой код (аутентификация выполняется перед этой функцией):

private static boolean WriteMfcBlock(MifareClassic mfc, int blockNumber, byte[] value) {
    try {
        byte[] toWrite = new byte[MifareClassic.BLOCK_SIZE];

        //if the value is less than 16 bytes, fill it with '0'
        for (int i=0; i<MifareClassic.BLOCK_SIZE; i++) {
            if (i < value.length) toWrite[i] = value[i];
            else toWrite[i] = 0;
        }

        if (!mfc.isConnected()) mfc.connect();

        mfc.writeBlock(blockNumber, toWrite);

        //Check if the writing is well done
        byte[] read = mfc.readBlock(blockNumber);
        for (int i = 0; i < MifareClassic.BLOCK_SIZE; i++ ) {
            if (toWrite[i] != read[i]) return false;
        }

        return true;
    }
    catch (IOException e) {
        textViewInfo.setText("IO EXCEPTION");
        return false;
    }
}

Спасибо за вашу помощь
Сильвен

1 Ответ

0 голосов
/ 26 июня 2011

Я делаю шаг вперед.Похоже, что это может быть связано с проблемой потока.Команда writeblock MifareClassic должна запускаться основным процессом действия.В моем приложении это кнопка (реализующая OnClickListener), которая запускает «блок записи».Находясь в режиме отладки, поток отладки может скрыть это поведение, поскольку он является основным потоком и обеспечивает правильную работу приложения.

Итак, теперь я просто попросил пользователя удалить тег из rf.поле и положить его обратно.Таким образом, я понял, что тег был обнаружен снова, и затем я могу без проблем выполнить команду «writeblock».

Наконец, я считаю, что лучший способ обработки операций чтения и записи в тегах - это действия create 2один для чтения и один для письма.

Если у вас есть какие-либо комментарии или другой способ сделать это .., пожалуйста, ответьте на эту тему.

Sylvain

...