2011-06-25 4 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の "writeblock"コマンドは、アクティビティのメインプロセスによってトリガされなければなりません。 私のアプリでは、 "writeblock"をトリガーしたボタン(OnClickListenerを実装しています)です。 デバッグモードでは、デバッグスレッドはメインスレッドであり、アプリケーションを正常に実行できるため、この動作を非表示にすることができます。

これからは、ユーザーにrfフィールドからタグを削除して戻すように依頼するだけです。だから私は、タグが再び発見されたという意図を得て、問題なく "writeblock"コマンドを実行することができます。

最後に、タグの読み書きを処理する最も良い方法は、2つのアクティビティを作成することです(読み込み用と書き込み用)。

コメントやその他の方法があれば、このスレッドに回答してください。

シルバイン

関連する問題