Используйте поле курсора в другом методе - PullRequest
0 голосов
/ 07 июня 2010

В моем приложении у меня есть поле Курсор, а в методе onStart() моего Сервиса Android я создаю его, выбирая записи из моей базы данных.Когда я смотрю в свой курсор в методе onStart(), я нахожу несколько записей, но когда я пытаюсь использовать их в моем методе trigger(), он имеет ноль записей.

поле private Cursor c;

в onStart () c = dbHelper.fetchAllRecords();

в триггере () c.getCount() возвращает 0

Я не закрывал курсор раньше, чем в моем onDestroy() методе

1 Ответ

1 голос
/ 07 июня 2010

Скорее всего, курсор на самом деле не "теряет записи", а, скорее всего, вы забыли набрать 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...