OutOfBoundsException при получении данных - PullRequest
0 голосов
/ 13 ноября 2018

Error

код

        MainData myDBHlpr = new MainData(getActivity()); // Instantiate a MainDatabasehelper object called myDBHlpr

        Cursor csr = myDBHlpr.getAllQuestions(getActivity());

        mMostMessagesSent.setText(csr.getString(csr.getColumnIndex("MostMessagesSent")));
        Log.d("ZZZ", csr.getString(csr.getColumnIndex("MostMessagesSent")));


        csr.close();

Просто код для извлечения данных SQLite, но получение исключения за пределами строки в строке. mMostMessagesSent.setText(csr.getString(csr.getColumnIndex("MostMessagesSent")));

Нулевой указатель

введите описание изображения здесь

Помощник по базе данных

public Cursor getAllQuestions(FragmentActivity usageSettings) {
    return this.getWritableDatabase().query(TABLE_NAME,null,null,null,null,null,null);
}

1 Ответ

0 голосов
/ 13 ноября 2018

Вы не перемещаетесь к фактической строке в Курсоре.Поэтому, когда вы пытаетесь получить данные, вы на перед первой строкой и, следовательно, на невозможно использовать смещение -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 будет указывать, что данные не были извлечены, если данные не были извлечены.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...