这里我正在开发一个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;
}
当我隐藏这个句子“new String(msgs 1。getRecords()[0] .getPayload())”时,我的程序可以顺利运行,所以我很确定程序在这一行。请问我该如何解决这个问题呢?
答案 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数组只包含一个元素但您尝试访问将不存在的第二个元素。因此,在访问数组之前,请更改代码并应用条件。