2012-07-17 46 views
0

在這裏,我正在開發一個adroid應用程序,它將讀取NFC標籤中的記錄。下面是我的程序中用於讀取標籤的代碼部分,當它讀取時,出現越界異常。ArrayIndexOutOfBoundsException發生

NdefMessage[] msgs = null; 
    String action = intent.getAction(); 
    if(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)|| 
      NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)){ 
     Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 
     if(rawMsgs != null){ 
      msgs = new NdefMessage[rawMsgs.length]; 
      for(int i=0; i<rawMsgs.length; i++){ 
       msgs[i] = (NdefMessage) rawMsgs[i]; 
      } 
     }else{ 
      byte[] empty = new byte[]{}; 
      NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty); 
      NdefMessage msg = new NdefMessage(new NdefRecord[]{record}); 
      msgs = new NdefMessage[]{msg}; 
     } 

    } 
    if(msgs==null){ 
     String[] array = new String[]{"No Tag discovered!"}; 
     return array; 
    }else{ 
     String[] array = new String[]{new String(msgs[0].getRecords()[0].getPayload()), 
             new String(msgs[1].getRecords()[0].getPayload()) 
     }; 
     return array; 
    } 

Records in tag

當我隱瞞了這句話 「新的字符串(消息1 .getRecords()[0] .getPayload())」,我的程序都能流暢運行,所以我很確定程序在這一行。請問我該如何解決這個問題?

+0

我試圖輸出一些值rawMsgs和郵件[0] .getReord()的兩個長度是長度爲1的,請問其中爲所述第二記錄? – Conrad 2012-07-17 08:54:37

回答

1

有問題是肯定在此行

new String[]{new String(msgs[0].getRecords()[0].getPayload()), 
              new String(msgs[1].getRecords([0].getPayload()) 

因爲你嘗試在上面一行訪問msgs[1].getRecords。但是,如果你看到你的代碼,在一定條件下像

else{ 
      byte[] empty = new byte[]{}; 
      NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty); 
      NdefMessage msg = new NdefMessage(new NdefRecord[]{record}); 
      msgs = new NdefMessage[]{msg}; 
     } 

封郵件數組僅包含一個元素,但你試圖訪問將不存在的第二個元素。因此,在訪問數組之前,更改您的代碼並應用條件。

+0

我終於試過了,我可以通過msgs [0] .getRecord()[1] .getPayload()來訪問第二個。我想問一個更多的問題,有沒有任何機會msgs數組包含多個元素?因爲我通過下面的例子寫出了這個程序,所以有些代碼我根本不明白。 – Conrad 2012-07-17 09:07:54

+0

您正在使用Parcelable [] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES); 如果rawMsgs的大小大於1,那麼msgs數組包含多個元素。有空 – 2012-07-17 09:12:34

+0

但在你的情況rawMsgs陣列知道這是錯誤的原因。 – 2012-07-17 09:13:31

相關問題