首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Android房间数据库删除查询不移除任何行

Android房间数据库删除查询不移除任何行
EN

Stack Overflow用户
提问于 2019-03-12 07:47:54
回答 1查看 3.9K关注 0票数 1

我已经创建了一个Room数据库来在聊天应用程序中存储消息,并将该表定义为:

代码语言:javascript
复制
@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;
    }
}

当我查询给定电话号码的所有消息时,它可以完美地检索它们(使用以下查询):

代码语言:javascript
复制
@Query("SELECT * FROM message_table WHERE phone_number = :phoneNumber LIMIT 50")
LiveData<List<Message>> getMessagesByNumber(String phoneNumber);

但是,当我尝试使用以下命令删除与完全相同的电话号码关联的所有消息时,每次都会得到0行的删除:

代码语言:javascript
复制
@Query("DELETE FROM message_table WHERE phone_number = :phoneNumber")
int delete(String phoneNumber);

我是不是漏掉了什么?我环顾了四周,但似乎找不到解决方案。(我已经四次检查了Select和Delete呼叫中使用的电话号码是100%相同的字符串)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-12 09:29:46

根据@Faisal对这个问题的评论。我忘了在后台线程中运行我的delete方法。

我将我的删除代码移到了一个AsyncTask中,现在它可以工作了。以下是存储库函数任务:

代码语言:javascript
复制
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;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55112041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档