如何从 EditActivity 中删除房间条目?

How to delete Room entry from EditActivity?

我有一个适配器和 RecyclerView 来显示本地保存的联系人列表。当用户点击一个条目时,一个新的 activity 是启动器,他们可以在其中编辑它。但是,我还希望在最底部有一个 "Delete" 按钮来删除条目,然后返回到适配器 activity。使用 Room 的删除查询或其他方式,如何从 EditContact 中删除条目 activity?

在 ContactDao 中,我有以下内容:

// Delete single entry
@Query("DELETE FROM contacts_table WHERE id = :userId")
void deleteByContactId(long userId);

联系人存储库:

public void delete(Contact contact) {
    new DeleteContactAsyncTask(contactDao).execute(contact);
}
private static class DeleteContactAsyncTask extends AsyncTask<Contact, Void, Void> {

        private ContactDao contactDao;

        private DeleteContactAsyncTask(ContactDao contactDao) {
            this.contactDao = contactDao;
        }

        @Override
        protected Void doInBackground(Contact... contacts) {
            contactDao.delete(contacts[0]);
            return null;
        }
    }

最后,我想在 EditContact 中删除点击条目:

public void deleteContact(View view) {
    // Delete the entry based on the ID
}

嗨,在你的 dao 文件中写一个查询

//get a contact
@Query("select * FROM contacts_table WHERE id = :userId")
Contact getConatctByContactId(long userId);

在编辑中获得联系人 ID 后 activity,调用此函数获取联系人。

但由于您的删除功能仅适用于 id,因此您无需检索即可从 table

中删除

更新

在数据库中声明dao class

public abstract class AppDatabase extends RoomDatabase {

    public abstract ContactDao contactDao();
}

并使用您的数据库实例调用它

database.contactPointDao().deleteContact()

我一直在尝试调试我的代码,因为我忘记在 DeleteContactByIdAsyncTask(contactDao, id);

结束时调用 .execute()

下面是我的最终代码片段:

ContactDao:

// Delete single entry
    @Query("DELETE FROM contacts_table WHERE id = :userId")
    void deleteByContactId(long userId);

联系人存储库:

private static class DeleteContactByIdAsyncTask extends AsyncTask<Contact, Void, Void> {

        private ContactDao contactDao;
        private int id;

        private DeleteContactByIdAsyncTask(ContactDao contactDao, int id) {
            this.contactDao = contactDao;
            this.id = id;
        }

        @Override
        protected Void doInBackground(Contact... contacts) {
            contactDao.deleteByContactId(id);
            return null;
        }
    }

ContactViewModel:

public void deleteContactById(int id) {
        contactRepository.deleteContactById(id);
    }

并且,在 ViewContact activity 中,返回结果时:

if (requestCode == EDIT_CONTACT_REQUEST && resultCode == RESULT_OK && isDeleted) {

            Toast.makeText(this, "Contact Deleted", Toast.LENGTH_SHORT).show();
            contactViewModel.deleteContactById(id);
            onBackPressed();

        }

就是这样。条目被删除,并在使用 RecyclerView 返回 activity 时,条目会自动更新。