如何从 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 时,条目会自动更新。
我有一个适配器和 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)
;
下面是我的最终代码片段:
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 时,条目会自动更新。