如何从EditActivity删除会议室条目?

我有一个适配器和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
}
MMLQY 回答:如何从EditActivity删除会议室条目?

您好,在您的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()
,

我正在广泛尝试调试代码,因为我忘记在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返回到活动后,条目将自动更新。

本文链接:https://www.f2er.com/2950351.html

大家都在问