Вы не перемещаетесь к фактической строке в Курсоре.Поэтому, когда вы пытаетесь получить данные, вы на перед первой строкой и, следовательно, на невозможно использовать смещение -1 .
Когда курсор возвращается методом SQLiteDatabase, курсор располагается в позиции, которая находится перед первой строкой.Эта позиция -1.
- Вы можете установить курсор перед первой строкой, используя, если необходимо,
csr.moveToPosition(-1)
.
Предполагая, что вы хотите пройти по всем строкамзатем следующее последовательно перемещается к каждой строке по очереди, пока не останется больше строк (обычно методы Cursor moveTo ???? возвращают true , если перемещение может быть выполнено, в противном случае они возвращают false )(именно поэтому цикл while работает для всех строк.)
Cursor csr = myDBHlpr.getAllQuestions(getActivity());
while (csr.moveToNext()) {
mMostMessagesSent.setText(csr.getString(csr.getColumnIndex("MostMessagesSent")));
}
csr.close();
Однако тогда будет отображаться только самая последняя строка в TextView.Если это проблема, и вы не можете решить ее, вам следует задать другой вопрос.
- Обратите внимание, что если у курсора нет строк, то ничего не будет сделано, и TextView останется таким, каким он был, частоВы хотите показать, что данные не были извлечены.-
- Например, применив это к вашему коду, вы можете иметь
mMostMessagesSent.setText("No Data Extracted")
перед циклом while, и поэтому TextView будет указывать, что данные не были извлечены, если данные не были извлечены.