gpt4 book ai didi

java - Android Room 数据库删除查询不删除任何行

转载 作者:行者123 更新时间:2023-11-29 23:17:17 25 4
gpt4 key购买 nike

我创建了一个 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);

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

最佳答案

根据@Faisal 对该问题的评论。我忘记在后台线程中运行删除方法。

我将我的删除代码移到了 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;
}
}

关于java - Android Room 数据库删除查询不删除任何行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55112041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com