我已经完成了查询限制的研发,但没有成功。有一种方法可以使用子列表对 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/