发生ArrayIndexOutOfBoundsException

时间:2012-07-17 08:35:21

标签: android nfc ndef

这里我正在开发一个adroid应用程序,它将读取NFC标签中的记录。这是我的程序中读取标记的代码部分,当它读取时,会发生超出范围的异常。

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

当我隐藏这个句子“new String(msgs 1。getRecords()[0] .getPayload())”时,我的程序可以顺利运行,所以我很确定程序在这一行。请问我该如何解决这个问题呢?

1 个答案:

答案 0 :(得分: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};
        }

msgs数组只包含一个元素但您尝试访问将不存在的第二个元素。因此,在访问数组之前,请更改代码并应用条件。