Android sqlite删除最后一行刷新不工作
我的listview上有一个长按选项,它将删除长按的db条目。删除确实有效。如果我退出应用程序并返回,我会收到“无行”消息。太好了 在我的代码中,我首先调用DBadapter方法来删除一行。然后,我在dbadapter中调用fetchallnotes方法来刷新我的listview。但是,在这次fetchallnotes调用中,最后一行不会消失。。仅在onCreate中的fetchallnotes调用上 这是我的上下文菜单调用,它调用我的DBAdapter方法Android sqlite删除最后一行刷新不工作,android,sqlite,Android,Sqlite,我的listview上有一个长按选项,它将删除长按的db条目。删除确实有效。如果我退出应用程序并返回,我会收到“无行”消息。太好了 在我的代码中,我首先调用DBadapter方法来删除一行。然后,我在dbadapter中调用fetchallnotes方法来刷新我的listview。但是,在这次fetchallnotes调用中,最后一行不会消失。。仅在onCreate中的fetchallnotes调用上 这是我的上下文菜单调用,它调用我的DBAdapter方法 db.deleteNote(info
db.deleteNote(info.id);
getSnapz();
这是DBAdapter中的我的deleteNote方法
public boolean deleteNote(long rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
public Cursor fetchAllNotes() throws Exception{
Cursor c = db.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_URI, KEY_DATE,KEY_TYPE,KEY_WEIGHT,
KEY_PLACE},
null, null, null, null, null );
return c;
}
这是我的getSnapz方法,它位于我的主活动中,我的listview就在这里
public void getSnapz(){
try {
Cursor c = db.fetchAllNotes();
//requery cursor incase the last entry has been deleted
c.requery();
startManagingCursor(c);
if(c.moveToFirst()){
String[] from = new String[]{DBAdapter.KEY_TYPE,DBAdapter.KEY_WEIGHT,DBAdapter.KEY_DATE,DBAdapter.KEY_PLACE};
int[] to = new int[]{R.id.typecol,R.id.weightcol,R.id.datecol,R.id.placecol};
SimpleCursorAdapter simple = new SimpleCursorAdapter(this, R.layout.snapz_row, c, from, to);
setListAdapter(simple);
}
} catch (Exception e) {
Log.e(TAG,e.toString());
}
}
这是我在DBAdapter中的fetchAllNotes方法
public boolean deleteNote(long rowId) {
return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
public Cursor fetchAllNotes() throws Exception{
Cursor c = db.query(DATABASE_TABLE, new String[] {KEY_ROWID,KEY_URI, KEY_DATE,KEY_TYPE,KEY_WEIGHT,
KEY_PLACE},
null, null, null, null, null );
return c;
}
删除最后一行后,返回的光标为空。因此,c.moveToFirst()返回false,跳过整个if块,listview保持不变,仍然显示刚刚删除的行 当您删除几行中的一行时,它会起作用,因为只要还有一行,moveToFirst()就会返回成功 它在退出并继续时工作,因为此时将重新创建活动,而listview未初始化 解决方案:完全删除if语句。SimpleCursorAdapter应该对0行的游标感到满意
从长远来看,更好的方法是迁移到ContentProvider,并使用ContentObserver模型来确保您的游标在数据库反映更改时自动更新。另外,我认为您的requery()调用是不必要的——在您调用db.fetchAllNotes()之前,行已经消失了。谢谢您,伙计。非常感谢你的建议!