Как курсор 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
}