Как курсор Android может находиться в отрицательном положении?

Изучая итерацию курсора, я узнал, что мне нужно было сначала перейти в позицию "-1", а затем использовать "moveToNext" в цикле:

cursor.moveToPosition(-1);
for (int i = 0; cursor.moveToNext(); i++) {
  //do something with the cursor
}

Хотя математически это имеет смысл, я не знаю, что значит переместить курсор в отрицательную позицию. Документация просто говорит, что она действительна - кажется, не говорит, как она используется.

Используется ли это ТОЛЬКО для того, чтобы сделать итерацию возможной, или есть другие варианты использования для позиции -1?

Ответ 1

Курсор не должен находиться в отрицательном положении, данные курсоров начинаются с позиции 0, поэтому вам всегда нужно переместить курсор в первую позицию, прежде чем получать данные с помощью

if(cursor.moveToFirst()){
    //you have data in the cursor
}

теперь, чтобы пройти через курсор, просто используйте цикл do/while

do{
    //process cursor data
}while(cursor.moveToNext);

то, что вы делаете, с вашим циклом прерывает это преобразование, если вы переместите курсор в первую позицию, тогда попробуйте выполнить цикл for, курсор попытается перейти к следующей позиции, прежде чем вы будете обрабатывать первую позицию. Вот почему вы не входите в цикл for, когда у вас есть 1 вещь в курсоре

Ответ 2

Индекс -1 в курсорах - это начальная позиция по умолчанию и резервная позиция. Вызов moveToFirst всегда будет перемещаться в позицию 0, если он существует. Вы хотите убедиться, что если вы используете moveToFirst, вы обрабатываете эту запись, а затем вызываете moveToNext.

if(cursor.moveToFirst()){ // moves to 0, process it.
    process(...);
  while(cursor.moveToNext()){ // moves to 1...n, process them.
     process(...);
   }
 }

Это всего лишь один из способов приблизиться к нему, надеюсь, что это поможет.

Удача

Ответ 3

-1 - позиция курсора по умолчанию, и вам всегда нужно переместить курсор в первую позицию, то есть 0-й индекс. Чтобы выполнить свою деятельность

cursor.moveToFirst(); //moves the cursor to the first position

Теперь для повторения

while(cursor.moveToNext())//when there a value in cursor.moveToNext
{
//your action to be performed
}