while (cursor.moveToNext()) запускается только один раз в Android studio

#calendar #cursor #android-sqlite #android-cursor

#Календарь #android-sqlite #android-курсор

Вопрос:

Я хочу отображать другой текст при нажатии на каждую дату, я проверил журнал, и кажется, что оператор while не работает после того, как я нажму один раз .. есть идеи?

вот мой код

  calendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
        @Override
        public void onSelectedDayChange(@NonNull CalendarView calendarView, int year, int month, int dayOfMonth) {
            tapDate = year   "/"   (month   1)   "/"   dayOfMonth;
            selectedDate.setText(tapDate);
            Log.d(TAG, "onSelectedDayChange: tapDate"  tapDate);

            while (cursor.moveToNext()) {
                item = new Shelf_items();
                item.setBookTitle(cursor.getString(0));
                item.setWriteDate(cursor.getString(1));
                Log.d(TAG, "onSelectedDayChange: while runs");

                if(item.getWriteDate().equals(tapDate)){
                    mShelf.add(item);
                    Log.d(TAG, "onSelectedDayChange: mshelf item" item);

                    for(Shelf_items i: mShelf){
                        i_result = i.getBookTitle()   " / ";
                    }
                    f_result  =i_resu<
                    Log.d(TAG, "onSelectedDayChange: for 문: " i_result);
                }
                bookName.setText(f_result);
            }
            cursor.close();
            
        }

    });
 

Ответ №1:

Если вы хотите снова прокрутить результирующий набор курсора, вам нужно перемотать курсор назад к началу. Замените

 while (cursor.moveToNext()) {
    ...
}
 

с

 if (cursor.moveToFirst()) {
    do {
        ...
    } while (cursor.moveToNext());
}
 

и удалите cursor.close() , поскольку вы еще не закончили с курсором.

Комментарии:

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