【问题标题】:Android room Database deletion not workingAndroid房间数据库删除不起作用
【发布时间】:2022-01-03 16:05:22
【问题描述】:

我正在使用 Room DB 来获取回收站视图。每行都有一个删除图标来删除该项目。我也想从 Room db 中删除相同的项目。我已经完成了下面的代码,但它只反映在列表中,刷新后再次从 db 加载已删除的数据。

带有删除监听器的适配器类:

btn_delete.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        deletePosition=getAdapterPosition();
        DeleteTask deleteTask = new DeleteTask();
        deleteTask.execute();
        alertDialog.dismiss();
    }
});
    
public class DeleteTask extends AsyncTask<Void, Void, Void> {
    @Override
    protected Void doInBackground(Void... integers) {
        DatabaseClient.getInstance(activity)
        .getAppDatabase()
        .DraftDataDao()
        .deleteById(deletePosition);
        return null;
    }
    
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        inProgressModelList.remove(deletePosition);
        notifyItemRemoved(deletePosition);
        notifyItemRangeChanged(deletePosition, inProgressModelList.size());
        globalData.setInprogress_count(inProgressModelList.size());
    }
}

数据库道

@Query("DELETE FROM MovieData WHERE Id = :id")
public abstract void deleteById(int id);

请帮帮我。

【问题讨论】:

    标签: android android-recyclerview android-room android-room-relation android-room-prepackageddatabase


    【解决方案1】:

    列表中的位置不等于正确的 id。

    位置是基于 0 的,分配的第一个 id 将是 1,除非您专门将分配的第一个 id 设置为 0(不太可能)但是逐步位置和 id 之间的相关性将变得越来越复杂.

    如果单击列表中的第一项,如果没有 id 设置为 0 的行,则不会删除任何内容。

    如果没有删除任何行,其他行将被淘汰 1。如果您然后单击删除列表中的第二个项目,则位置将为 1,假设 id 为 1 的行存在并被删除,那么现在最低 id 为 2。所以现在单击第一个或第二个项目列表不会导致删除。如果点击了第 3 项并进行了删除,那么现在最低的 id 为 3 ....

    简而言之,您需要获取位于该位置的 MovieData 对象的实际 id。

    【讨论】:

    • 是的,我明白了。但问题是没有从数据库中删除。
    【解决方案2】:

    首先,AsyncTask 现在是一个过时的类,我建议你看看协程或 rxjava。

    其次,您的适配器从 0 开始计数元素。而在数据库中,如果您选择了主键的自动递增,则从 1 开始报告。可能正因为如此,存在问题

    【讨论】:

      猜你喜欢
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      • 1970-01-01
      • 2022-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多