在当前正在开发的项目中,我们正在集成Realm Database到客户的应用程序中,以提高响应速度,同时处理约 20,000 条记录的庞大数据集。对于屏幕演示,我们正在合并 Realm's Android Recyclerview 。大多数用例是读取操作,然后是高级搜索和/或过滤记录的可能性。
问题在于,在我们的一些 View 中,给定类型的所有数据中只应该显示由后端选择的记录子集。使用 API 传递的信息,我们执行初始过滤并设置 View 。
现在,使用上述技术,是否有一种可读且可维护的方式来存储这个预过滤的子集或获取它的查询以供进一步引用,以便一旦 searchview 和/或过滤器被清除?或者存储 API 响应并重新应用通过它给出的条件是否应该是唯一的方法?对查询应用任何新条件似乎都会永久改变它,对结果应用新查询也是如此。是否应该有一种方法可以在旧结果集的基础上为我们自己创建一个新的结果集,但又不会干扰后者?编辑:我们的应用程序是“双语”的,基于 Java 和 Kotlin 的解决方案都受到欢迎(如果它们有所不同)。
最佳答案
正如我们在本周早些时候意识到的那样,正如 @EpicPandaForce 在评论中提到的那样,而 RealmQuery 对象不能通过在之前将其分配给备用变量来“快照”扩展它,对于 RealmResults 对象来说情况并非如此。所以:
RealmResults<Obj> widerResults = realmInstance.where(Obj.class).in("id", idArray).findAll;
RealmResults<Obj> narrowerResults = widerResults.where().equalTo("flag", true).findAll;
将提供两个独立的结果集。可以根据我强调的用例使用更宽的一个 - 将其视为进一步子查询的起点。对集合本身中发现的对象所做的更改仍将反射(reflect)在两个集合中。
为所有迷失的灵魂提供答案,以防他们像我们一样陷入困境。
关于java - Java/Android Realm - 保留查询/结果的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51909515/