Java 填充多维数组时IndexOutOfBounds异常
我有一些循环使用的xml数据。我希望将每个“条目”存储在一个数组点中,以便通过intent.putExtras()查看它。我的数据有3个元素:latlon、name、description。我想把每一个都放到我的数组中。所以我是这样设置的:markerInfo[I][0]=Loc;等像这样:Java 填充多维数组时IndexOutOfBounds异常,java,android,arrays,multidimensional-array,indexoutofboundsexception,Java,Android,Arrays,Multidimensional Array,Indexoutofboundsexception,我有一些循环使用的xml数据。我希望将每个“条目”存储在一个数组点中,以便通过intent.putExtras()查看它。我的数据有3个元素:latlon、name、description。我想把每一个都放到我的数组中。所以我是这样设置的:markerInfo[I][0]=Loc;等像这样: final List<XmlDom> entries = xml.tags("Placemark"); int i = entries.size(); int j=0;
final List<XmlDom> entries = xml.tags("Placemark");
int i = entries.size();
int j=0;
for (XmlDom entry : entries) {
XmlDom lon = entry.tag("longitude");
XmlDom lat = entry.tag("latitude");
XmlDom name = entry.tag("name");
XmlDom desc = entry.tag("description");
String cdatareplace = desc.toString();
String description = cdatareplace.replace("<![CDATA[", "");
description = description.replace("]]>", "");
final String firename = name.text();
final String firedesc = description;
String geoLon = lon.text();
String geoLat = lat.text();
String coor = lat + "," + lon;
// Log.e("COORS: ", coor);
double lati = Double.parseDouble(geoLat);
double lngi = Double.parseDouble(geoLon);
LOCATION = new LatLng(lati, lngi);
String Loc = LOCATION.toString();
String[][] markerInfo = new String[i][3];
markerInfo[j][0] = Loc;
markerInfo[j][1] = firename;
markerInfo[j][2] = firedesc;
Log.e("MARKERINFO",markerInfo[j][0]);
Log.e("MARKERINFO",markerInfo[j][1]);
Log.e("MARKERINFO",markerInfo[j][2]);
map.addMarker(new MarkerOptions()
.position(LOCATION)
.title(markerInfo[j][1])
.snippet(markerInfo[j][2])
.icon(BitmapDescriptorFactory
.fromResource(R.drawable.wfmi_icon48)));
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
@Override
public void onInfoWindowClick(Marker arg0) {
// Show full description in new activity.
// fireDesc(arg0.getTitle(), arg0.getSnippet());
Intent i = new Intent(Map.this, MapSingleActivity.class);
i.putExtra("name", arg0.getTitle())
.putExtra("description", arg0.getSnippet())
.putExtra("lat", arg0.getPosition().latitude)
.putExtra("lon", arg0.getPosition().longitude);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
}
});
j++;
}
final List entries=xml.tags(“Placemark”);
int i=entries.size();
int j=0;
for(XmlDom条目:条目){
XmlDom lon=entry.tag(“经度”);
XmlDom lat=entry.tag(“纬度”);
XmlDom name=entry.tag(“name”);
XmlDom desc=entry.tag(“description”);
字符串CDATA替换=desc.toString();
字符串描述=CDATA替换。替换(“,”);
最后一个字符串firename=name.text();
最终字符串firedesc=描述;
字符串geoLon=lon.text();
字符串geoLat=lat.text();
串coor=lat+“,”+lon;
//Log.e(“COORS:”,coor);
double-lati=double.parseDouble(geoLat);
double lngi=double.parseDouble(geoLon);
位置=新板条(lati,lngi);
字符串Loc=LOCATION.toString();
字符串[][]markerInfo=新字符串[i][3];
markerInfo[j][0]=Loc;
markerInfo[j][1]=firename;
markerInfo[j][2]=firedesc;
Log.e(“MARKERINFO”,MARKERINFO[j][0]);
Log.e(“MARKERINFO”,MARKERINFO[j][1]);
Log.e(“MARKERINFO”,MARKERINFO[j][2]);
addMarker(新的MarkerOptions()
.职位(位置)
.标题(markerInfo[j][1])
.snippet(markerInfo[j][2])
.图标(位图描述符工厂)
.fromResource(R.drawable.wfmi_icon48));
setOnInfoWindowClickListener(新的OnInfoWindowClickListener(){
@凌驾
公用无效信息窗口单击(标记arg0){
//在新活动中显示完整描述。
//fireDesc(arg0.getTitle(),arg0.getSnippet());
Intent i=新Intent(Map.this、mapsingelactivity.class);
i、 putExtra(“名称”,arg0.getTitle())
.putExtra(“说明”,arg0.getSnippet())
.putExtra(“纬度”,arg0.getPosition().lation)
.putExtra(“lon”,arg0.getPosition().longitude);
i、 添加标志(意图、标志、活动、清除、顶部);
星触觉(i);
}
});
j++;
}
我将数组索引设置为超出范围。我想如果我用条目填充它。size()就不会有问题了,所以也许我没有正确地告诉它有多大
感谢您的帮助您需要确保第二个维度也足够大 通过将
markerInfo
的声明更改为:
String[][] markerInfo = new String[i][3];
目前您只创建i
emptyString
数组。使用上述代码,您将创建i
数组,每个数组可以容纳三个String
对象
另外,此时正在写入数组边界之外的最后一个位置
您需要将其更改为写入到可用位置。如果您试图写入到最后一个可用的位置,即i-1
markerInfo[i-1][0] = Loc;
markerInfo[i-1][1] = firename;
markerInfo[i-1][2] = firedesc;
然而,看看你的代码,你可能想在循环之外声明
markerInfo
,并创建一个计数器变量,在循环的每一步递增。你需要确保第二维度也足够大
通过将markerInfo
的声明更改为:
String[][] markerInfo = new String[i][3];
目前您只创建i
emptyString
数组。使用上述代码,您将创建i
数组,每个数组可以容纳三个String
对象
另外,此时正在写入数组边界之外的最后一个位置
您需要将其更改为写入到可用位置。如果您试图写入到最后一个可用的位置,即i-1
markerInfo[i-1][0] = Loc;
markerInfo[i-1][1] = firename;
markerInfo[i-1][2] = firedesc;
然而,看看你的代码,你可能想在循环之外声明
markerInfo
,并创建一个计数器变量,在循环的每一步递增。数组的第二个大小是0-新字符串[i][0]
。然后尝试在位置0,1,2上插入不可用的内容
即使您编写
新字符串[i][3]
,最大索引也是i-1
数组的第二个大小是0-新字符串[i][0]
。然后尝试在位置0,1,2上插入不可用的内容
markerInfo[i-1][0] = Loc;
markerInfo[i-1][1] = firename;
markerInfo[i-1][2] = firedesc;
即使你写了
新字符串[i][3]
,那么最大索引是i-1
啊,你在编辑之前就抓到了我的帖子。很抱歉我在那里添加了这个,但是仍然让数组出界…谢谢你的帮助。我正试图传递一些数据,我想这可能是。。。但是看起来我只能在填充mdarray之前得到我所得到的。。。等等…啊,你在编辑之前就看到我的帖子了。很抱歉我在那里添加了这个,但是仍然让数组出界…谢谢你的帮助。我正试图传递一些数据,我想这可能是。。。但是看起来我只能在填充mdarray之前得到我所得到的。。。呜呜……哪里是j
定义的?@Pawel就在for循环的上方,哪里是j
定义的?@Pawel就在for循环的上方
markerInfo[i-1][0] = Loc;
markerInfo[i-1][1] = firename;
markerInfo[i-1][2] = firedesc;