我已经创建了一个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%相同的字符串)。
发布于 2019-03-12 09:29:46
根据@Faisal对这个问题的评论。我忘了在后台线程中运行我的delete方法。
我将我的删除代码移到了一个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;
}
}
https://stackoverflow.com/questions/55112041
复制相似问题