簡體   English   中英

Android房間數據庫刪除不起作用

[英]Android room Database deletion not working

我正在使用 Room DB 來獲取回收站視圖。 每行都有一個刪除圖標來刪除該項目。 我也想從 Room db 中刪除相同的項目。 我已經完成了下面的代碼,但它只反映在列表中,刷新后再次從 db 加載已刪除的數據。

帶有刪除偵聽器的適配器 class:

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

請幫助我。

列表中的 Position 不等於正確的 id。

Position 基於 0,分配的第一個 id 將為 1,除非您專門將分配的第一個 id 設置為 0(不太可能)但是position 和 id 之間的相關性將變得越來越復雜。

如果單擊列表中的第一項,如果沒有 id 設置為 0 的行,則不會刪除任何內容。

如果沒有刪除任何行,其他行將被淘汰 1。 如果您然后單擊刪除列表中的第二個項目,position 將為 1,假設 id 為 1 的行存在並被刪除,那么現在最低 id 為 2。所以現在單擊第一個或第二個項目列表不會導致刪除。 如果單擊第 3 個項目並進行刪除,那么現在最低的 id 是 3....

簡而言之,您需要獲取位於 position 的 MovieData object 的實際 ID。

首先,AsyncTask 現在是一個過時的 class,我建議你看看協程或 rxjava。

其次,您的適配器從 0 開始計數元素。在數據庫中,如果您選擇了主鍵的自動增量,則從 1 開始報告。也許正因為如此,存在問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM