Android ArrayIndexOutOfBoundsException发生
在这里,我正在开发一个adroid应用程序,它将读取NFC标签中的记录。下面是我程序中读取标记的部分代码,当它读取时,会发生越界异常Android ArrayIndexOutOfBoundsException发生,android,nfc,ndef,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
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;
}
NdefMessage[]msgs=null;
String action=intent.getAction();
如果(NfcAdapter.ACTION\u NDEF\u DISCOVERED.equals)(ACTION)||
NfcAdapter.ACTION_TAG_DISCOVERED.equals(ACTION)){
Parcelable[]rawMsgs=intent.getParcelableArrayExtra(NfcAdapter.EXTRA\u NDEF\u消息);
if(rawMsgs!=null){
msgs=新的NdefMessage[rawMsgs.length];
对于(inti=0;iYes),这一行中的问题是肯定的
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数组仅包含一个元素,但您尝试访问第二个元素,该元素将不存在。因此,请在访问数组之前更改代码并应用条件。我已尝试输出一些值,包括RAWMSG的长度和msgs[0]。getReord()是长度为1的,请问第二条记录在哪里?我终于尝试过了,我可以通过msgs[0].getRecord()[1].getPayload()访问第二条记录。我想再问一个问题,msgs数组是否有可能包含多个元素?因为我是通过以下示例编写此程序的,所以有一些代码我一点也不懂。您使用的是Parcelable[]rawMsgs=intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);如果rawMsgs的大小大于1,则msgs数组包含多个元素。但在您的情况下,rawMsgs数组包含Null,我以前尝试输出rawMsgs的长度,在我的情况下,它向meso显示1。如果正确,程序应以else方式而不是rawMsgs方式获取消息?