我面临一个非常奇怪的问题。我有一个存储在解析服务器中的4条记录,我从解析中检索列表,我的代码看起来像这样:
query.findInBackground(new FindCallback<ParseObject>() {
@Override
public void done(List<ParseObject> objects, ParseException e) {
List<Spot> list = new ArrayList<Spot>();
spot s;
int index = 0;
for (ParseObject o : objects) {
s=jsonToSpot(o);
list.add(s);
Log.d("app",list.get(index).getLatLng.toString()); // return the coordinate of spot object
index++;
}
Log.d("app",list.get(1).getLatLng.toString());
Log.d("app",list.get(2).getLatLng.toString());
Log.d("app",list.get(3).getLatLng.toString());
Log.d("app",list.get(4).getLatLng.toString());
getAllListener.done(list);
}
});
private Spot jsonToSpot(ParseObject o) {
Log.d("app", "Model jsonToSpot");
Spot s = new Spot(o.getDouble("latitude"), o.getDouble("longitude"));
return s;
}
现在问题是我在for循环中的日志运行良好,这意味着它每次迭代都会打印不同的Spot。但循环后发生的日志会打印相同的Spot,这意味着列表中的每个销售都包含相同的位置。
我无法理解出了什么问题,感谢您的帮助。
答案 0 :(得分:0)
spot s;
int index = 0;
for (ParseObject o : objects) {
s=jsonToSpot(o);
list.add(s);
Log.d("app",list.get(index).getLatLng.toString()); // return the coordinate of spot object
index++;
}
基本上您正在做的是,您将s
的引用存储到最后,并且您不断更改引用中的值。你应该在循环中做的是,每次在循环中创建一个新的Spot
并将Spot
存储到列表中。
int index = 0;
for (ParseObject o : objects) {
Spot s = jsonToSpot(o);
list.add(s);
Log.d("app",list.get(index).getLatLng.toString()); // return the coordinate of spot object
index++;
}
上面的代码段会帮助您。
答案 1 :(得分:0)
不是解决方案,而是建议。你不能使用它需要的1,2,3,4到0,1,2,3。您需要使用零偏移。记录的后半部分可能是:
for(int i=0;i<list.size;i++) {
Log.d("app", "index: " + i + ", value: " + list.get(i).getLatLng.toString());
}
此外,检查getLatLng()并查看它是否返回正确的值可能会很好。