Realm Clone RealmQuery在不同的线程中

时间:2017-05-17 21:46:14

标签: android multithreading realm rx-java2

如何在不同的线程中克隆RealmQuery?

问题:

  1. X 主题中创建RealmQuery。
  2. 查询RealmResults是同一个帖子。
  3. 如果为空结果,请从 Y 主题
  4. 中的服务器获取数据
  5. 在后台线程中将数据插入Realm( Y )。 < - 新领域的实例
  6. 使用与 Z 主题中的1相同的过滤器重新查询。
  7. 在主线程中返回结果。
  8. 截至目前,我正在获得java.lang.IllegalStateException: Realm accessed from incorrect thread.

    使用RealmQuery.createQueryFromResult(RealmResults<E> queryResults)尝试克隆。在内部克隆使用结果的相同领域实例。

    如果queryResults为空,克隆会如何表现?

    如果可以在RxJava2中完成克隆,那会更好。

1 个答案:

答案 0 :(得分:1)

  

使用与Z Thread中的1相同的过滤器重新查询。

     

在主线程中返回结果。

好的,所以这是完全没必要的,因为你可以创建一个RealmQuery并存储对RealmResults的字段引用,向它添加一个RealmChangeListener,当你在后台线程中插入Realm时,它会自动更新RealmResults并调用它RealmChangeListener。

因此,您不需要在Z线程中使用相同的过滤器重新查询&#34; (因为Realm的findAllSortedAsync()已在后台线程上查询),并且您不需要在主线程中手动返回结果,因为findAllSortedAsync()已经这样做了。

解决方案:使用Realm的通知系统(和异步查询API)。阅读文档:https://realm.io/docs/java/latest/#notifications