【问题标题】:reuse objects removed from realm database重用从领域数据库中删除的对象
【发布时间】:2017-08-23 17:01:15
【问题描述】:

我想重用曾经从数据库中删除的领域对象。

可以说,我从数据库中删除了一个对象。

Story story = realm.where(Story.class).equalTo("id","id").findFirst();

story.deleteFromRealm();

现在,我想将删除的对象汇集起来,并希望以不同的“id”(主键)重用它,而不是每次都创建一个新对象。

当前的实现不允许我这样做并抛出异常。

我的问题是,是否有另一种方法可以实现相同的目标。 如果不是,这应该是添加到领域的功能吗?

抛出异常的请求代码

Story story1 = StoryObjPool.getInstance().getStory();
            if(story1 != null){
                story1.setId(1234);
            }

异常

java.lang.IllegalStateException: This Realm instance has already been closed, making it unusable.


at io.realm.BaseRealm.checkIfValid(BaseRealm.java:348)                                                                              
at io.realm.StoryRealmProxy.realmSet$id(StoryRealmProxy.java:177)                                                             
at com.hn.nishant.nvhn.model.Story.setId(Story.java:98)                                          

【问题讨论】:

  • 你能显示The current implementation does not allow me to do this and throws an exception的代码吗
  • realm 抛出一个非法状态异常,表示对象从数据库中删除时已关闭
  • 我有另一个想法可以解决你的问题,你不需要从 Realm 中删除对象,只需更新这个 id
  • id 是主键。
  • 如果我伪造你的问题,我将使用copyFromRealm()story 转换为独立对象,然后使用copyToRealm() 更改id 并将其保存到领域

标签: android realm


【解决方案1】:
Story story = realm.where(Story.class).equalTo("id","id").findFirst();
// create standalone object that not reference to realm
Story stoyStandalone = realm.copyFromRealm(story);

story.deleteFromRealm();

// save standalone object to realm
stoyStandalone.setId(...);
realm.copyToRealm(stoyStandalone);

【讨论】:

  • 我想重用同一个对象以避免不必要的 GC 事件。该解决方案没有解决主要问题或回答我的问题。
  • 但同一个对象始终保持对领域的引用
  • 它说它会创建一个对象的副本,我无法深入研究代码,你怎么能确定:)
  • 请查看realm.io/docs/java/latest/#realms。普通 Java 对象和 Realm 对象有什么区别?
  • 这是正确的答案,因为当前的 API 无法满足您的要求。 Java 垃圾收集器非常高效,那么您是否测量过您的 GC 有问题,或者您只是在猜测?
猜你喜欢
  • 1970-01-01
  • 2016-09-24
  • 2023-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多