Перемещение курсора в Android

#android

#Android

Вопрос:

В учебном пособии Google Notepad для Android (http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html ), у них есть следующее для «fetchNote»

 /**
 * Return a Cursor positioned at the note that matches the given rowId
 * 
 * @param rowId id of note to retrieve
 * @return Cursor positioned to matching note, if found
 * @throws SQLException if note could not be found/retrieved
 */
public Cursor fetchNote(long rowId) throws SQLException {

    Cursor mCursor =

            mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID,
                    KEY_TITLE, KEY_BODY}, KEY_ROWID   "="   rowId, null,
                    null, null, null, null);
    if (mCursor != null) {
        mCursor.moveToFirst();
    }
    return mCursor;

}
  

Почему мы перемещаем курсор в first, если он не равен null? Я знаю, что это работает, но я этого не понимаю. Почему бы просто не вернуть курсор? Почему он не указывает на нужный нам объект?

Ответ №1:

При создании объекта cursor существует небольшая вероятность того, что что-то может пойти не так, и объект не был создан, а mDb.query() метод вернул значение Null. Если это так, то попытка вызова mCursor.moveToFirst() вызовет NullPointerException . Если объект не равен нулю и был инициализирован правильно, то вы вызываете moveToFirst() предположительно, чтобы поместить курсор в начало списка элементов.

Ответ №2:

Когда вы впервые получаете курсор, он в настоящее время указывает на какой-то несуществующий элемент перед первой записью. Вызывая moveToFirst, метод fetchNote подготавливает курсор к немедленному считыванию вызывающим методом. Причина, по которой мы должны сначала проверить, имеет ли курсор значение null, заключается в том, что есть вероятность, что что-то могло пойти не так с запросом, и база данных вернула значение null. Если бы мы попытались вызвать moveToFirst для курсора, мы бы получили исключение нулевого указателя.