【问题标题】:sqlite delete last row refresh not workingsqlite删除最后一行刷新不起作用
【发布时间】:2011-02-26 04:23:23
【问题描述】:

我的列表视图上有一个长按选项,它将删除长按的数据库条目。删除确实有效。如果我退出应用程序并返回,我会看到我的“无行”消息。完美。

在我的代码中,我首先调用 DBadapter 方法来删​​除一行。然后我在 dbadapter 中调用 fetchallnotes 方法来刷新我的列表视图。但是,在此 fetchallnotes 调用中,最后一行不会消失。仅在我的 onCreate 中的 fetchallnotes 调用中。

这是我的上下文菜单调用,它调用了我的 DBAdapter 方法

db.deleteNote(info.id);
getSnapz();

这是我在 DBAdapter 中的 deleteNote 方法

public boolean deleteNote(long rowId) {
     return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}

这是我的 getSnapz 方法,它在我的主要活动中,这是我的列表视图所在的位置

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 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;
}

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    删除最后一行后,返回的游标为空。因此 c.moveToFirst() 返回 false,跳过整个 if 块,并且列表视图保持不变,仍然显示刚刚删除的行。

    当您删除几行中的一个时它会起作用,因为只要还有另一行,moveToFirst() 就会返回成功。

    当您退出并恢复时它会起作用,因为此时会重新创建活动并且列表视图开始时未初始化。

    解决方案:完全删除 if 语句。 SimpleCursorAdapter 应该对 0 行的游标感到满意。

    从长远来看,更好的是,迁移到 ContentProvider 并使用 ContentObserver 模型确保您的游标在它们反映的数据库发生更改时自行更新。

    【讨论】:

    • 另外我认为你的 requery() 调用是不必要的——在你调用 db.fetchAllNotes() 之前该行已经消失了。
    • 谢谢你的朋友。非常感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2016-05-17
    • 2017-07-24
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-02
    • 1970-01-01
    相关资源
    最近更新 更多