【问题标题】:How to retrieve data from a cursor in android?如何从android中的游标中检索数据?
【发布时间】:2022-02-04 05:50:07
【问题描述】:

我从我的数据库中检索信息,这些信息都在游标中。现在我需要遍历光标中的每个项目以检索 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() 的方法,它返回游标中的许多项目,我如何从该游标中的每一行检索每个 lng lat 和 name?

【问题讨论】:

    标签: java android database sqlite android-cursor


    【解决方案1】:

    您可以使用 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 类,它可以存储位置的名称、经度和纬度。然后,您可以将通过光标创建的所有对象存储在数组或列表中。

    【讨论】:

    • 这样你不会总是丢失列表的第一个元素吗?使用 do-while 循环而不是 while 不是更好吗?
    • 这样你不会丢失光标的第一项吗?
    【解决方案2】:

    首先。您可以只使用光标上的 getInt、getLong 等方法来检索值,而不是事后解析它们。

    问题:

    这里是语法:

    首先查询数据库以获取游标。

    接下来对光标进行空检查(以防万一,因为它有时会发生),也可以使用 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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-01
      • 2019-02-20
      • 1970-01-01
      相关资源
      最近更新 更多