Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SQLite数据库中的项未在RecyclerView中删除_Android_Sqlite_Android Sqlite_Android Recyclerview - Fatal编程技术网

Android SQLite数据库中的项未在RecyclerView中删除

Android SQLite数据库中的项未在RecyclerView中删除,android,sqlite,android-sqlite,android-recyclerview,Android,Sqlite,Android Sqlite,Android Recyclerview,我有一个回收站。当我单击delete按钮时,它会从RecyclerView中删除一个项目,但当我重新启动应用程序时,该项目会返回。以下是my database类中的函数: public boolean deleteList(long rowId) { return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0; } public boolean deleteList(String name) {

我有一个回收站。当我单击delete按钮时,它会从RecyclerView中删除一个项目,但当我重新启动应用程序时,该项目会返回。以下是my database类中的函数:

public boolean deleteList(long rowId) {
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
public boolean deleteList(String name) {
    return db.delete(DATABASE_TABLE, KEY_NAME + "=" + name, null);
}
下面是我的适配器类和删除按钮:

@Override
public void onBindViewHolder(RecyclerViewViewHolder viewHolder, final int position) {
    viewHolder.name.setText(list.get(position).name);
    viewHolder.date.setText(list.get(position).date);
    viewHolder.delete.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            RecyclerViewListSchema item = list.get(position);
            SQLiteDatabaseAdapter database = new SQLiteDatabaseAdapter(view.getContext());
            database.open();

            boolean deleteList = database.deleteList((long) position);
            list.remove(position);
            notifyItemRemoved(position);

            database.close();
        }
    });
}
更新: 我在我的
deleteList
函数中添加了一个提交函数,如下所示:

public boolean deleteList(long rowId) {
    db.beginTransaction();

    try {
        db.setTransactionSuccessful();
    }

    catch (Exception e) {
        Log.v("Commit", "Error: + " + e);
    }

    finally {
        db.endTransaction();
    }
    return db.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
我也没有在Android显示器上看到任何东西。
如何解决此问题?

您正试图通过传递当前项目位置的值来删除。当然不行了!您需要尝试通过其ID或其在RecyclerView中的名称获取该项,后者意味着数据库和RecyclerView中的任何项都不能具有相同的名称。在数据库类中尝试以下操作:

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

在适配器中,调用相同的函数,但传递当前项文本,而不是其在RecyclerView中的位置。

您正试图通过传递当前项位置的值来删除。当然不行了!您需要尝试通过其ID或其在RecyclerView中的名称获取该项,后者意味着数据库和RecyclerView中的任何项都不能具有相同的名称。在数据库类中尝试以下操作:

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

在适配器中,调用相同的函数,但传递当前项文本,而不是其在RecyclerView中的位置。

列表是否从数据库填充?你错过了一个任务吗?@dumb\u terminal是的。列表是从数据库中填充的。那么肯定不会从数据库中删除该项。这里可以存在两种情况。1.删除逻辑不成功。2.删除成功,但更改未提交到db。@dumb_terminal如何添加提交?db.beginTransaction();尝试{db.setTransactionSuccessful();}捕获{//数据库事务之间的错误}最后{db.endTransaction();}是否从数据库填充列表?你错过了一个任务吗?@dumb\u terminal是的。列表是从数据库中填充的。那么肯定不会从数据库中删除该项。这里可以存在两种情况。1.删除逻辑不成功。2.删除成功,但更改未提交到db。@dumb_terminal如何添加提交?db.beginTransaction();尝试{db.setTransactionSuccessful();}捕获{//数据库事务之间的错误}最后{db.endTransaction();}现在可以工作了。最初,它有时会删除,有时则不会。这是因为当您删除一个项目时,位置会发生变化,并且您试图删除位置错误的项目。现在它可以工作了。最初,它有时会删除,有时则不会。这是因为当您删除一个项目时,位置会发生变化,并且您试图删除位置错误的项目。