android - 如何在 Realm 的查询中设置 LIMIT?

标签 android realm realm-list

我已经完成了查询限制的研发,但没有成功。有一种方法可以使用子列表对 Realm 中的数据进行分页,但没有成功。它在其中显示重复值。

这是我尝试的分页。

 RealmResults<Person> mPersonData=RealmUtils.getAllPersonWithTagsDescending(); 
    if (mPersonData != null) { 
    int startPos=getAllPerson.size()-1; 
    int endPos=mPersonData.size()-1; 
    List<Person> newPersonData=mPersonData.subList(startPos,endPos);   
    getAllPerson.addAll(newPersonData); 
    mAdapter.notifyDataSetChanged(); 
}

我做错了什么?

最佳答案

如果您使用 RealmResults<T>,就没有理由在 Realm 中使用分页直接,因为 RealmResults 中的元素被延迟评估,并且在您调用 .get(i) 之前不在内存中.

意思是,在您直接索引元素之前,查询不会执行和计算元素。这意味着,它们不在内存中。 RealmResults<T>列表实际上并不包含元素,它只知道如何找到它们。

因此,没有 LIMIT在 Realm 。

请注意,如果我没记错的话,重新计算两个 RealmResults findAllSorted 未返回的可以有不同的顺序(如果发生删除)。如果无论如何顺序都必须相同,则考虑 rank属性,并按 findAllSorted("rank", Sort.ASCENDING) 订购.

如果你真的想要分页,你应该有排名参数,然后你可以创建一个查询

realm.where(SomeClass.class)
     .greaterThanOrEqualTo("rank", pageSize*pageIndex + 0)
     .lessThan(SomeClassFields.RANK, pageSize*pageIndex + pageSize)
     .findAllSorted(SomeClassFields.RANK, Sort.ASCENDING);

此外,您应该考虑使用 RealmRecyclerViewAdapter 而不是 here :

compile 'io.realm:android-adapters:1.3.0' // for Realm 0.89.0 to Realm 2.3.0

compile 'io.realm:android-adapters:2.1.0' // for Realm 3.0.0+    

compile 'io.realm:android-adapters:3.0.0' // for Realm 5.0.0+    

RealmRecyclerViewAdapter为您处理“加载新数据”,除了设置初始 RealmResults 之外,您无需执行任何操作即可使其正常工作。 .



一旦与 Paging Architecture Component 正确集成,我实际上必须更改此答案,谁知道呢?我有一个实验 here你可以看看它是否适合你。

关于android - 如何在 Realm 的查询中设置 LIMIT?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38873402/

相关文章:

java - 即使我声明了 Android 权限也不起作用

java - 如何将 LifecycleOwner 转换到服务类上?

java - Realm 中 ID 的自定义方法以支持自动递增行为

android - 从 RealmList 中删除 RealmObject

java - Android RealmList<Integer> 和 RealmList<String>

android - 我们可以在 Android 中使用 wi-fi 热点连接 10 个以上的设备吗

java - 在 Android 应用程序中显示较大的格式化文本文章

java - 找不到 "librealm-jni.so"

android - 如何使用具有功能模块结构的 Realm ?

ios - Realm - 从列表中删除和添加对象