2011-06-25 48 views
1

我有一個奇怪的問題。當我調試我的程序並在「writeBlock」命令寫入我的MifareClassic卡之前放置一個斷點時,一切都很順利。該卡被寫入並且我的程序繼續。
如果我刪除斷點,我得到一個「IO異常:收發失敗」!我把斷點放回去而不改變我的代碼,它再次運行!Nexus S:在未進入調試模式時寫入MifareClassic NFC標籤失敗

我迷路了......難道這個問題有可能來自程序執行的速度嗎?有一個斷點,使執行速度較慢...

這裏是我的代碼(驗證此功能之前完成):

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

感謝您的幫助
西爾

回答

0

我往前走一步。看起來它可能來自線程問題。 MifareClassic的「寫塊」命令必須由活動的主要過程觸發。 在我的應用程序中,它是一個觸發「寫塊」的按鈕(實現OnClickListener)。 在調試模式下,調試線程可以隱藏這種行爲,因爲它是主線程並使應用程序運行良好。

因此,從現在起,我所做的只是要求用戶從rf字段中移除標籤並將其放回。所以我的意圖是再次發現一個標籤,然後我可以毫無問題地執行「writeblock」命令。

最後,我最好的方式來處理讀寫標籤是創建2個活動,一個用於閱讀,一個用於寫作。

如果您有任何意見或其他方式來做到這一點..請回答此線程。

Sylvain

相關問題