Android 房间数据库删除不起作用?

标签 android database sql-delete android-room

我做了一些简单的测试项目,但我在删除时遇到了一些问题。它不会工作。我可以正常添加联系人,但是当我尝试删除它时,什么也没有发生,我也没有任何错误。这是我的代码:

实体

@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;
        }
    }
}

有什么解决办法吗?

最佳答案

在某些情况下,添加自定义删除 by-id 而不是使用自动生成的删除 by-object 可能更好。

在这种情况下是

    @Query("DELETE FROM Contact WHERE id = :contact_id")
    void deleteContactById(int contact_id);

参见 https://stackoverflow.com/a/47554641/6513193了解更多信息。

关于Android 房间数据库删除不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50413911/

相关文章:

java - 使用 HttpURLConnection 发送 UTF-8 字符串

android - 用背景色写在android中

php - Codeigniter 使用复选框删除多行

c# - 关闭应用程序时,数据库中的所有数据都将被删除

mysql - mysql中的行删除

android - 如何在 Android Studio 1.5 中包含 .so 库和 .c 文件

java - hibernate - 从集合中删除项目

mysql - 针对特定极慢查询的优化

php - 为什么不删帖子呢?

android - 在底部对齐的 AdMob 横幅非常靠近 Android 4.4 kitkat 中的后退、主页和菜单按钮