4

クエリの制限について研究開発を行いましたが、成功しませんでした。サブリストを使用してデータをページ分割する方法は 1 つありますが、それでは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(); 
}

私は何を間違っていますか?

4

4 に答える 4

19

RealmResults<T>直接使用する場合、Realm でページネーションを使用する理由はありません。これは、 の要素RealmResultsが遅延評価され、 を呼び出すまでメモリにないためです.get(i)

つまり、直接インデックスを作成するまで、クエリは要素を実行および評価しません。つまり、それらは記憶にありません。リストには実際に要素が含まれRealmResults<T>ているわけではなく、それらを見つける方法を知っているだけです。

そのためLIMIT、レルムにはありません。

RealmResults私の記憶が正しければ、によって返されない2 つを再評価すると、順序が異なる可能性があることに注意してください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から代わりに使用することを検討する必要があります。

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



ページング アーキテクチャ コンポーネントと適切に統合されたら、実際にこの回答を変更する必要があります。私はここでそれを試してみました。それがうまくいくかどうかを確認できます.

于 2016-08-10T12:30:43.973 に答える