我有以下for循环,它查看结果的字符串ArrayList,字符串中的每个项目都用“::”分隔:
ArrayList<String> resultsArray = MyClass.results;
Integer numPoints = resultsArray.size();
for (int i =0;i<numPoints;i++){
String[] pointDetails = resultsArray.get(i).split("::");
String pointName = pointDetails[0];
String pointDescription = pointDetails[1];
String coordinates = pointDetails[2];
//Turn coordinates into geopoints
String coord[] = coords.split(",");
Integer lng= (int) (Double.valueOf(coord[0]) * 1000000);
Integer lat = (int)(Double.valueOf(coord[1])*1000000);
GeoPoint gPoint = new GeoPoint(lng,lat);
arrayPointName = new ArrayList <String>();
arrayPointDescription = new ArrayList <String>();
arrayPointCoords=new ArrayList<GeoPoint>();
arrayPointName.add(pointName);
arrayPointDescription.add(pointDescription);
arrayPointCoords.add(gPoint);
}
我知道我在初始字符串ArrayList中有20个点并打印出它的大小来检查它。但是,当我打印出新的arraylists时,例如arrayPointName,它们只包含一个点。知道为什么会这样吗?
答案 0 :(得分:7)
看看这段代码:
arrayPointName = new ArrayList <String>();
arrayPointDescription = new ArrayList <String>();
arrayPointCoords=new ArrayList<GeoPoint>();
这三个语句 - 为变量分配新的空ArrayList
引用 - 正在循环的每次迭代上执行。
他们应该在循环之前来:你只需要初始化一次变量(创建三个列表),然后在每次迭代时添加一个新项目。
作为旁注,像这样填充多个集合通常是一个坏主意。通常最好创建一个封装相关数据的单一类型(在这种情况下为名称,描述,坐标),然后创建该类型项目的单个集合。这通常更容易使用。
答案 1 :(得分:0)
你使用coords作为ArrayList而不启动它。你也为每个迭代arrayPointName,arrayPointDescription和arrayPointCoords启动,这就是为什么它们丢失了在前一次迭代中创建的值。他们应该在开始循环前一次启动juste
如果你给我们一个resultsArray strring的样本,那么很容易帮到你。