简体   繁体   English

房间数据库的删除方法无效

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM