【问题标题】:Delete method for Room Database is not working房间数据库的删除方法不起作用
【发布时间】:2019-07-01 11:25:19
【问题描述】:

我有一个这样的 DAO 方法

@Query("DELETE FROM Weather WHERE name = :name")
Completable deleteDataByName(String name);

天气对象

@Entity
public class Weather {

    @PrimaryKey(autoGenerate = true)
    public int id;
    public String name;
    public String date;
    public String description;
    public String icon;
    etc.

当我调用deleteDataByName 方法时,数据不会被删除。 我该如何解决? 数据库中有 16 个同名的 Weather 对象 我怎样才能删除它们?

【问题讨论】:

  • 您的查询似乎正确,如何确保数据不被删除?
  • 发布堆栈跟踪
  • 在下一个活动中,我正在从数据库中读取数据并且数据存在,未删除
  • 你能把你的代码贴在你调用deleteDataByName函数的地方吗?
  • private void getDeleteByName(String city) { mAppDatabase.getWeatherDao().deleteDataByName(city); }

标签: java android android-room


【解决方案1】:

我遇到了同样的问题,通过使用 androidx 组件解决了。尝试更新房间组件

    // 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"

【讨论】:

  • 抱歉,这无法解决我的问题
【解决方案2】:

可能您需要使用高于或等于 2.1.0 的房间版本 如果您使用 gradle 构建您的应用程序,请转到项目 gradle 文件并添加以下行:

ext {
    roomVersion = '2.1.0-rc01'
}

然后你可以在 app gradle 中更新你的房间依赖:

implementation "androidx.room:room-rxjava2:2.1.0"
implementation "androidx.room:room-runtime:$rootProject.roomVersion"

您还可以找到更多信息here

编辑 这是您可能需要的完整应用程序 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"
}

【讨论】:

  • 没有帮助:(
  • 您能粘贴您的实际 gradle 构建脚本吗?因为我实际上正在使用房间,我的删除方法工作正常
  • 或者尝试从你的删除方法中删除返回类型,看看它是否有效,让它像这样:deleteDataByName(String name);
  • 最后的希望是在数据库中查询您要删除的 Weather 对象,然后将其传递给 delete 方法:Completable deleteData(Weather weather);
  • 我添加镜像 build.gradle
【解决方案3】:

我看了你的评论:

private void getDeleteByName(String city) { mAppDatabase.getWeatherDao().deleteDataByName(city); } – Vadim Fedchuk 2 days ago

你说得不对。你的mAppDatabase.getWeatherDao().deleteDataByName(city) 自己不会做任何事情,它是可完成的。您必须订阅它才能使用它。

【讨论】:

    猜你喜欢
    • 2018-10-29
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多