Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/214.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 填充多维数组时IndexOutOfBounds异常_Java_Android_Arrays_Multidimensional Array_Indexoutofboundsexception - Fatal编程技术网

Java 填充多维数组时IndexOutOfBounds异常

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;

我有一些循环使用的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;
            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
empty
String
数组。使用上述代码,您将创建
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
empty
String
数组。使用上述代码,您将创建
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;