1

我有一个奇怪的问题。当我调试我的程序并在“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;
    }
}

感谢您的帮助
西尔万

4

1 回答 1

0

我向前迈了一步。似乎它可能来自线程问题。MifareClassic 的“writeblock”命令必须由活动的主进程触发。在我的应用程序中,它是一个触发“writeblock”的按钮(实现 OnClickListener)。在调试模式下,调试线程可以隐藏此行为,因为它是主线程,并使应用程序运行良好。

所以从现在开始,我所做的只是要求用户从 rf 字段中删除标签并将其放回原处。所以我得到了再次发现标签的意图,然后我可以毫无问题地执行“writeblock”命令。

最后,我认为处理标签读写的最佳方法是创建 2 个活动,一个用于阅读,一个用于写作。

如果您有任何意见或其他方式来做到这一点.. 请回答这个线程。

西尔万

于 2011-06-26T10:44:48.023 回答