我有一些循环的xml数据。我想将每个“条目”存储在数组中,以便使用intent.putExtras()查看它。我的数据有3个元素:latlon,名称,描述。我想把每个放在我的阵列中。所以我这样设置:markerInfo [i] [0] = Loc;等......就像这样:
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++;
}
我的数组索引超出界限。我想如果我用entries.size()填充它不会是问题,所以也许我不是说它有多大正确?
感谢您的帮助
答案 0 :(得分:2)
你需要确保第二个维度也足够大
通过将markerInfo
的声明更改为:
String[][] markerInfo = new String[i][3];
目前您只创建i
空String
数组。使用上面的代码,您将创建i
个数组,每个数组可以包含三个String
个对象。
此外,您正在写入阵列边界之外的最后一个位置。
您需要将其更改为写入可用位置。如果您尝试写入最后一个可用的位置i-1
。
markerInfo[i-1][0] = Loc;
markerInfo[i-1][1] = firename;
markerInfo[i-1][2] = firedesc;
然而,查看您的代码,似乎您可能希望在循环之外声明markerInfo
并创建一个在循环的每一步递增的计数器变量。
答案 1 :(得分:2)
数组的第二个大小为0 - new String[i][0]
。然后你尝试在0,1,2位置插入一些不可用的东西。
即使您编写new String[i][3]
,最大索引也是i-1
。