为了账号安全,请及时绑定邮箱和手机立即绑定

安卓会议室数据库删除查询未删除任何行

安卓会议室数据库删除查询未删除任何行

繁星淼淼 2022-08-03 15:59:57
我创建了一个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%相同)。
查看完整描述

1 回答

?
红颜莎娜

TA贡献1842条经验 获得超13个赞

我忘记在后台线程中运行我的删除方法。


我将删除代码移动到异步任务,它现在可以工作了。以下是存储库函数任务:


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;

    }

}


查看完整回答
反对 回复 2022-08-03
  • 1 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号