我从我的数据库中检索信息,它全部在Cursor中。现在我需要浏览光标中的每个项目以检索lng lats和要在地图上显示的名称。
Cursor c = mDbHelper.fetchSpot(15);
startManagingCursor(c);
double lat = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LAT)));
double lng = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LNG)));
String name = c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_ADDRESS));
我有一个名为fecthAllSpots()
的antoher方法,它返回游标中的许多项目,如何从该游标中的每一行检索每个lng lat和name?
答案 0 :(得分:9)
您可以使用while循环迭代光标返回的所有行。
while(c.moveToNext()){
double lat = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LAT)));
double lng = Double.parseDouble(c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_LNG)));
String name = c.getString(c.getColumnIndexOrThrow(ParkingSpotDBAdapter.KEY_ADDRESS));
}
当然你必须对lat,lng和name变量做一些事情,因为它们会在每次迭代时被覆盖。我建议你实现一个DBLocation类,它可以存储一个位置的名称,经度和纬度。然后,您可以将从光标创建的所有对象存储在数组或列表中。
答案 1 :(得分:6)
首先。你可以在游标上使用getInt,getLong等方法来检索值而不是之后解析它们。
问题:
这是sintax:
首先查询db以获取游标。
接下来对游标进行空检查(以防万一因为它有时会发生),也可以使用try catch块。
接下来写:
if(c.moveToFirst()){
do{
// YOUR CODE FOR EACH CURSOR ITEM HERE.
// the cursor moves one field at a time trhough it's whole dataset
}while(c.moveToNext())
}
最后关闭光标或者如果它是托管查询,则不执行任何活动将为您关闭它。在一个块中重新记住所有这一切,除了你要检查的其他内容之外,还要考虑游标的nullPointerException。