Android Room Database Удалить запрос, не удаляя строки - PullRequest
1 голос
/ 12 марта 2019

Я создал базу данных Room для хранения сообщений в приложении чата и определил таблицу следующим образом:

@Entity(tableName = "message_table")
public class Message {

    @NonNull
    @PrimaryKey(autoGenerate = true)
    public long id;

    @NonNull
    public String body;

    @NonNull
    @ColumnInfo(name = "phone_number")
    public String phoneNumber;

    public Message(String body, String phoneNumber) {
        this.body = body;
        this.phoneNumber = phoneNumber;
    }
}

И когда я запрашиваю все сообщения для данного телефонного номера, он может получить их идеально (используя следующий запрос):

@Query("SELECT * FROM message_table WHERE phone_number = :phoneNumber LIMIT 50")
LiveData<List<Message>> getMessagesByNumber(String phoneNumber);

Но, когда я пытаюсь удалить все сообщения, связанные с одним и тем же номером телефона, с помощью следующей команды, я получаю каждый раз 0 строк:

@Query("DELETE FROM message_table WHERE phone_number = :phoneNumber")
int delete(String phoneNumber);

Я что-то здесь упускаю? Я посмотрел вокруг, но не могу найти решение этой проблемы. (И я уже четыре раза проверил, что номер телефона, используемый в вызовах выбора и удаления, на 100% совпадает со строкой).

Ответы [ 2 ]

1 голос
/ 12 марта 2019

Согласно комментарию @ Фейсала к вопросу. Я забыл запустить мой метод удаления в фоновом потоке.

Я переместил свой код удаления в AsyncTask, и теперь он работает. Вот задача функции хранилища:

private static class deleteAsyncTask extends AsyncTask<Void, Void, Void> {

    private MessageDao mAsyncTaskDao;
    private String mPhoneNumber = null;

    public deleteAsyncTask(MessageDao dao) {
        mAsyncTaskDao = dao;
    }

    public deleteAsyncTask(MessageDao dao, String phoneNumber) {
        mAsyncTaskDao = dao;
        mPhoneNumber = phoneNumber;
    }


    @Override
    protected Void doInBackground(Void... voids) {
        if (mPhoneNumber == null) {
            mAsyncTaskDao.deleteAll();
        }
        else {
            mAsyncTaskDao.delete(mPhoneNumber);
        }
        return null;
    }
}
0 голосов
/ 12 марта 2019

У меня была похожая проблема с удалением записей из виртуальной таблицы SQLite FTS3. Помогло заключить числа в одинарные кавычки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...