[英]Delete method for Room Database is not working
I have a DAO method like this 我有这样的DAO方法
@Query("DELETE FROM Weather WHERE name = :name")
Completable deleteDataByName(String name);
Weather object 天气对象
@Entity
public class Weather {
@PrimaryKey(autoGenerate = true)
public int id;
public String name;
public String date;
public String description;
public String icon;
etc.
Data is not deleted when I call deleteDataByName
method. 调用
deleteDataByName
方法时不会删除数据。 How can I fix it? 我该如何解决? There are 16 Weather objects in the database with the same name How can I delete them?
数据库中有16个具有相同名称的Weather对象如何删除它们?
I had the same issue and is resolved by using androidx components. 我有同样的问题,并通过使用androidx组件解决。 Try with updated room components
尝试使用更新的房间组件
// optional - Kotlin Extensions and Coroutines support for Room
implementation "androidx.room:room-ktx:$room_version"
// optional - RxJava support for Room
implementation "androidx.room:room-rxjava2:$room_version"
Probably you need to use a room version higher or equal than 2.1.0 If you are using gradle to build your app go to the project gradle file and add those lines: 您可能需要使用高于或等于2.1.0的房间版本如果您使用gradle构建应用程序,请转到项目gradle文件并添加以下行:
ext {
roomVersion = '2.1.0-rc01'
}
Then you can update your room dependency in the app gradle with this: 然后,您可以使用以下内容更新应用程序gradle中的房间依赖关系:
implementation "androidx.room:room-rxjava2:2.1.0"
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
Also you can find more information here . 您也可以在这里找到更多信息。
EDIT This is a complete app gradle that you probably need (plus your others dependencies): 编辑这是您可能需要的完整应用程序gradle(加上您的其他依赖项):
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
android {
...
}
allprojects {
repositories {
...
}
}
dependencies {
// Room components
implementation "androidx.room:room-runtime:$rootProject.roomVersion"
implementation "androidx.room:room-rxjava2:2.1.0"
kapt "androidx.room:room-compiler:$rootProject.roomVersion"
}
I read your comment: 我看了你的评论:
private void getDeleteByName(String city) { mAppDatabase.getWeatherDao().deleteDataByName(city); } – Vadim Fedchuk 2 days ago
You are not calling it right. 你说的不对。 Your
mAppDatabase.getWeatherDao().deleteDataByName(city)
will do nothing by itself, it's Completable. 您的
mAppDatabase.getWeatherDao().deleteDataByName(city)
本身不会执行任何操作,它是可完成的。 You have to subscribe to it to make it work. 您必须订阅它才能使其正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.