Удаление базы данных Android комната не работает? - PullRequest
0 голосов
/ 18 мая 2018

Я сделал несколько простых проектов для тестирования, но у меня возникли проблемы с удалением.Это не сработает.Я могу добавить контакт нормально, но когда я пытаюсь удалить его, ничего не происходит, и у меня нет никаких ошибок.Вот мой код:

Сущность

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

Есть какие-нибудь решения?

1 Ответ

0 голосов
/ 18 мая 2018

Посмотрите на сгенерированный код addContact ().Он не устанавливает идентификатор для вашего экземпляра Contact, поэтому вам нужно сделать это самостоятельно.

@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);
...