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