Android中的光标移动

Android中的光标移动,android,Android,在谷歌的Android记事本教程中(http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html),它们的“fetchNote”有以下内容 如果光标不为空,为什么要将其移到第一个位置?我知道它有效,但我不明白。为什么不直接返回光标呢?为什么它没有指向我们想要的对象?当您创建游标对象时,有一点可能会出错,并且对象没有创建,并且通过mDb.query()方法返回Null。如果是这种情况,那么尝试调用mCursor.

在谷歌的Android记事本教程中(http://developer.android.com/resources/tutorials/notepad/notepad-ex1.html),它们的“fetchNote”有以下内容


如果光标不为空,为什么要将其移到第一个位置?我知道它有效,但我不明白。为什么不直接返回光标呢?为什么它没有指向我们想要的对象?

当您创建游标对象时,有一点可能会出错,并且对象没有创建,并且通过
mDb.query()
方法返回Null。如果是这种情况,那么尝试调用
mCursor.moveToFirst()
将抛出
NullPointerException
。如果对象不为null且已正确初始化,则可以调用
moveToFirst()
将光标放在项目列表的开头。

当您第一次获得光标时,它当前指向第一条记录之前的某种不存在的元素。通过调用moveToFirst,fetchNote方法正在准备由调用方法立即读取光标。我们必须首先检查游标是否为null的原因是,查询可能出现了问题,数据库返回了null。如果我们试图在游标上调用moveToFirst,我们将得到一个空指针异常

/**
 * 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;

}