android - Android房间数据库删除不起作用?
问题描述
我做了一些简单的测试项目,但我在删除时遇到了一些麻烦。它行不通。我可以正常添加联系人,但是当我尝试删除它时,什么也没有发生,我也没有任何错误。这是我的代码:
实体
@Entity
public class Contact {
@PrimaryKey(autoGenerate = true)
private int id;
@ColumnInfo(name = "contact_name")
private String contactName;
@ColumnInfo(name = "contact_number")
private String contactNumber;
@ColumnInfo(name = "contact_image")
@Nullable
private String contactImage;
...
我的道:
@Dao
public interface ContactDao {
@Query("SELECT * FROM Contact")
LiveData<List<Contact>> getContacts();
@Query("SELECT * FROM Contact WHERE id = :contact_id")
Contact getContactById(int contact_id);
@Insert
void addContact(Contact contact);
@Delete
void deleteContact(Contact contact);
}
ViewModel:
public class ContactViewModel extends AndroidViewModel {
private LiveData<List<Contact>> contacts;
private ContactsDatabase contactsDatabase;
public ContactViewModel(@NonNull Application application) {
super(application);
contactsDatabase = ContactsDatabase.getINSTANCE(this.getApplication());
contacts = contactsDatabase.contactDao().getContacts();
}
public LiveData<List<Contact>> getContacts() {
return contacts;
}
public void deleteContact(Contact contact) {
new deleteAT(contactsDatabase).execute(contact);
}
private class deleteAT extends AsyncTask<Contact, Void, Void> {
private ContactsDatabase contactsDatabase;
deleteAT(ContactsDatabase db) {
this.contactsDatabase = db;
}
@Override
protected Void doInBackground(Contact... contacts) {
contactsDatabase.contactDao().deleteContact(contacts[0]);
return null;
}
}
}
有什么解决办法吗?
解决方案
查看生成的 addContact() 代码。它不会在您的 Contact 实例上设置 id,因此您需要自己做。
@Entity
public class Contact {
@PrimaryKey(autoGenerate = true)
private long id;
//...
}
@Dao
public interface ContactDao {
@Insert
long addContact(Contact contact); //returns autogenerated id
@Delete
void deleteContact(Contact contact);
}
那么这应该工作:
long insertedId = dao.addContact(contact);
contact.setId(insertedId);
dao.deleteContact(contact);
推荐阅读
- python - 从正在运行的 python 实例中读取 k8s 部署标签
- rest - 测试在邮递员中通过,但在纽曼中没有通过
- sml - 为什么要在queen中定义类型?
- laravel - Laravel 7 未定义的方法
- java - Springboot put 方法不起作用(控制台显示 get 调用)
- python - Python:如何通过仅保留恒定信息来连接两个数据帧?
- probability - 如何表达保护方法的有效性
- jenkins - 使用声明性管道脚本,从文件夹中获取文件名并将其分配给全局变量,并在另一个阶段调用该变量
- ssis - SSIS - 使用源表中的不匹配行更新目标表(使用 Pentaho 数据集成)
- php - 如何使用 RewriteRule 以便为 PHP 修改 $_SERVER['REQUEST_URI']?