【问题标题】:Android realm.io: Row/Object is no longer validAndroid realm.io:行/对象不再有效
【发布时间】:2014-12-06 12:07:35
【问题描述】:

这是我的删除函数,它确实找到了workday1 对象:

public static void delete(Context context, Workday workday) {
    Realm realm = getRealm(context);
    realm.beginTransaction();

    Workday workday1 = realm.where(Workday.class)
            .equalTo("date", workday.getDate())
            .equalTo("hours", workday.getHours())
            .equalTo("minutes", workday.getMinutes())
            .findFirst();

    workday1.removeFromRealm();
    realm.commitTransaction();
}

当它执行removeFromRealm 方法时会崩溃:

java.lang.IllegalStateException: Illegal State: Row/Object is no longer valid to operate on.被删除了吗?

我该如何解决这个问题?任何帮助将不胜感激。

UPDATE(我可以打印以下方法返回的内容):

    Workday workday1 = realm.where(Workday.class)
            .equalTo("date", workday.getDate())
            .equalTo("hours", workday.getHours())
            .equalTo("minutes", workday.getMinutes())
            .findFirst();

    System.out.println("--------------------------------");
    System.out.println(workday1.getHours());

【问题讨论】:

  • 在 removeFromRealm() 之前可以访问对象吗?例如打印出来?
  • 可以,请检查我的更新。
  • 如果这是你可以复制的东西,我建议你在github.com/realm/realm-java/issues创建一个github问题

标签: android database realm


【解决方案1】:

您正在尝试删除尚未提交给领域的对象。

在这种特殊情况下,如果由于某种原因您不想再提交对象,您可以简单地取消事务。

【讨论】:

  • 我查询该对象,然后尝试在事务中删除它。我没有看到我做错了什么,只是按照文档:realm.io/docs/java/0.75.0/#deletion
  • 您使用的是哪个版本的 Realm?可能是您在不需要的地方使用了 close() 方法
  • 我在我的 gradle 构建中使用以下内容:io.realm:realm-android:0.75.1
  • 我无法重现此问题。您能否提供一个触发此问题的示例项目?
  • 我公开了我的repo:github.com/Jdruwe/Overtime,删除方法可以在WorkdayUtil类下找到。您可以通过删除添加的日历项来触发它。
【解决方案2】:

就我而言,问题在于我要删除的同一个对象位于适配器中。在我让适配器扩展 RealmBaseAdapter 之后,问题就停止了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-07
    相关资源
    最近更新 更多