实践总结

  Whattodo项目,一个关于时间管理的小项目,为老婆大人写的,当做练手。

  version 1.0,具体任务,建立数据库sqlite实现。UI见面暂时就是一个简单的listview,每一item是一个标题加单选框。目标实现简单的插入,修改,和删除。还有就是对任务的排序,实现方式是list的下拉刷新。

  总结下之前遇到的问题:

  1.从sqlite读取单行内容,返回一个cursor,这时候sqlite的处理和别的之前接触的数据库有些不同。不同体现在cursor.movetofirst(),这个方法上。简单解释下就是,执行拉一个query之后返回一个cursor,如果这个cursor不为null,那么这个cursor的getposition方法讲返回一个整数。需要注意的是,其值为-1,也就是说,我们不做任何处理想直接把这个cursor拿出来用,大家会发现很奇怪的错误,大体就是positon是-1这个错误。

  code:

public Cursor fetchMission(long rowId)

{

Cursor mCursor = mDb.query(true,DATABASE_TABLE_MISSION, new String[]{KEY_ROWID,KEY_TITLE,KEY_BODY,KEY_PRIORITY,KEY_STATUS}, KEY_ROWID + "=" +rowId,null, null, null,null,null);

if(mCursor != null)

mCursor.moveToFirst();

return mCursor;

}

我们调用了这个方法后,我们可以直接使用例如:

Cursor mission = mDbHelper.fetchMission(mRowId);

mTitleText.setText(mission.getString(mission.getColumnIndex(ItemToDoDBAdapter.KEY_TITLE)));

上面是正确的,但是,如果我们把方法中的 mCursor.movetofirst()方法去了。

上述调用将会报错。

对比之下,大家应该就可以看出来差异了。sqllite里面的查询命令返回的cursor的默认游标位置是第一组数据的前一个位置,就是-1。

所以大家在从cursor再获取数据的时候,要斟酌下是使用do..while(mCursor.moveToNext()),还是while((mCursor.moveToNext()){}

 

2.spinner中根据value还获取position的处理。

posted @ 2012-02-05 00:18  HIT_tidus  阅读(177)  评论(0)    收藏  举报