我有一个适配器和RecyclerView来显示本地保存的联系人列表。当用户单击条目时,将启动一个新活动,可以在其中编辑它。但是,我也想在最底部有一个“删除”按钮来删除条目,然后返回到适配器活动。使用Room的删除查询,否则,如何从EditContact活动中删除条目?
在ContactDao中,我有以下内容:
// Delete single entry
@Query("DELETE FROM contacts_table WHERE id = :userId")
void deleteByContactId(long userId);
ContactRepository:
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
}
答案 0 :(得分:0)
您好,在您的dao文件中写一个查询
//get a contact
@Query("select * FROM contacts_table WHERE id = :userId")
Contact getConatctByContactId(long userId);
在编辑活动中获得联系人ID后,请调用此函数以获取联系人。
但是由于您的删除功能仅适用于ID,因此您无需检索即可从表中删除
更新
在数据库类中声明dao
public abstract class AppDatabase extends RoomDatabase {
public abstract ContactDao contactDao();
}
并使用您的数据库实例调用它
database.contactPointDao().deleteContact()
答案 1 :(得分:0)
我正在广泛尝试调试代码,因为我忘记在DeleteContactByIdAsyncTask(contactDao, id)
的末尾调用.execute();
下面是我的最终代码段:
ContactDao:
// Delete single entry
@Query("DELETE FROM contacts_table WHERE id = :userId")
void deleteByContactId(long userId);
ContactRepository:
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活动中,返回结果后:
if (requestCode == EDIT_CONTACT_REQUEST && resultCode == RESULT_OK && isDeleted) {
Toast.makeText(this, "Contact Deleted", Toast.LENGTH_SHORT).show();
contactViewModel.deleteContactById(id);
onBackPressed();
}
就是这样。条目将被删除,并在使用RecyclerView返回到活动后,条目将自动更新。