Android выбор курсора понимание - PullRequest
0 голосов
/ 15 августа 2011

Я хотел бы понять строку в фрагменте кода, который я видел:

public Cursor fetchMessageByMessageId(String msgId) {
    Cursor mCursor =

    mDb.query(true, DATABASE_MESSAGES_TABLE, new String[] { KEY_ROWID,
            KEY_CONVERSATION_ID, KEY_MSG_ID, KEY_TITLE, KEY_BODY,
            KEY_IS_REPLY, KEY_MEDIA_LOC, KEY_URL, KEY_TIMESTAMP },
            KEY_MSG_ID + "='" + msgId + "'", null, null, null, null, null);
    **if (mCursor != null) {
        mCursor.moveToFirst();
    }**
    return mCursor;
}

Следующие строки кода между **

Нужна ли эта строка? Сегодня я потратил 2 часа на отладку, чтобы выяснить, почему мои данные отсутствовали, когда я позвонил примерно так:

while(mCursor.moveTonext())

используйте курсор, чтобы получить некоторые данные, и в итоге всегда пропускали первые данные. Поэтому я посмотрел на другие части кода и понял, что поместил весь курсор в адаптер, чтобы жирная линия выше не имела никакого эффекта. После удаления этих строк кода все было хорошо!

Короче говоря, если я просто хочу курсор с 1 результатом или многими, нужно ли вызывать жирный оператор выше? Спасибо!

1 Ответ

0 голосов
/ 15 августа 2011

Как правило, вы получаете набор строк при вызове query().Первоначально курсор будет указывать ни на что.Если вы позвоните по номеру mCursor.moveToNext() или mCursor.moveToFirst(), вам нужно указать первый ряд.Дополнительные вызовы на mCursor.moveToNext() переместят курсор к следующему кортежу.Короче говоря, звоните mCursor.moveToNext() только тогда, когда вам нужно получить информацию из следующей строки (если она существует).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...