在另一个方法中使用Cursor字段

时间:2010-06-07 17:31:09

标签: android

在我的应用程序中,我有一个Cursor字段,在我的Android服务的onStart()方法中,我通过从我的数据库中提取记录来创建它。当我在onStart()方法中查看我的光标时,我找到了许多记录但是当我尝试在我的trigger()方法中使用它时,它没有记录。

该领域 private Cursor c;

onStart()中的

c = dbHelper.fetchAllRecords();

触发器中的

() c.getCount()返回0

我没有比我的onDestroy()方法

更早关闭光标

1 个答案:

答案 0 :(得分:1)

很可能光标实际上并没有“丢失记录”,而是在每次迭代记录之前忘记c.movetofirst()

换句话说,当您遍历光标记录时,记录指针会向上,向上,向上,直到它“超过最后一条记录”。因此,为了再次遍历游标,您必须通过执行c.movetofirst()来重置记录指针。

c.moveToFirst();
while (!c.isAfterLast()) 
  print ("Data: " + c.getString(0));

然后再次运行相同的while循环将不会执行,因为光标的记录指针尚未重置:

while (!c.isAfterLast()) 
  print ("Data: " + c.getString(0));

(没有打印)

因此,您实际上需要将第二个代码块更改为:

c.moveToFirst();
while (!c.isAfterLast()) 
  print ("Data: " + c.getString(0));