どのようにFirestoreクエリの組み合わせタスクの最後の目に見えるDocumentSnapshotを取得しますか?

SabeehのUIハク:

私はローカルでそれをしなければならないので、Firestoreでネイティブには不可能であるFirestoreコレクションの「ない等しい」クエリを実行するために2つのクエリを組み合わせています。私は改ページに使用する私の複合タスクの最後に表示されているドキュメントを取得する必要があります。

以下は、私は両方のクエリ結果からの文書のリストを取得するために書いていることをコードです。

    Query first = firebaseFirestore
            .collection("jobs")
            .whereGreaterThan("createdBy",currentUser.getEmail())
            .orderBy("createdDate",Query.Direction.ASCENDING)
            .limit(2);
    Query second = firebaseFirestore
            .collection("jobs")
            .whereLessThan("createdBy",currentUser.getEmail())
            .orderBy("createdDate",Query.Direction.ASCENDING)
            .limit(2);

    Task<QuerySnapshot> firstTask = first.get();
    Task<QuerySnapshot> secondTask = second.get();


    final Task<List<QuerySnapshot>> combinedTask = Tasks.whenAllSuccess(firstTask, secondTask);
    combinedTask.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
        @Override
        public void onSuccess(List<QuerySnapshot> querySnapshots) {
            List<Job> list = new ArrayList<>();
            for(QuerySnapshot qs: querySnapshots){
                for(DocumentSnapshot document: qs){
                    Job job = document.toObject(Job.class);
                    list.add(job);
                }
            }

            JobAdapter jobAdapter = new JobAdapter(list);
            recyclerView.setAdapter(jobAdapter);

            DocumentSnapshot lastVisible = combinedTask.getResult().get()

        }
    });

ラインで

 DocumentSnapshot lastVisible = combinedTask.getResult().get()

私はどちらか、私は最後の可視のドキュメントを取得する方法がわからないだので、私は最後の文書が論理的に私の2番目のクエリからだと思うが、私はわからないよ私の最初のクエリまたは私の2番目のクエリからドキュメントにアクセスすることができます。

ここで私はこれを達成するために、次のされたチュートリアルでは、次のとおりです。

https://www.youtube.com/watch?v=KdgKvLll07s

アレックス・マモ:

あなたは、単に作成することによって、この問題を解決することができlastVisible、あなたのクラスにグローバル変数として:

private DocumentSnapshot lastVisible;

そして、forループで値をassigninを:

final Task<List<QuerySnapshot>> combinedTask = Tasks.whenAllSuccess(firstTask, secondTask);
combinedTask.addOnSuccessListener(new OnSuccessListener<List<QuerySnapshot>>() {
    @Override
    public void onSuccess(List<QuerySnapshot> querySnapshots) {
        List<Job> list = new ArrayList<>();
        for(QuerySnapshot qs: querySnapshots){
            for(DocumentSnapshot document : qs){
                Job job = document.toObject(Job.class);
                list.add(job);
                lastVisible = qs.getDocuments().get(qs.size() - 1);
            }
        }
        Query nextQuery = firebaseFirestore
                .collection("jobs")
                .whereGreaterThan("createdBy",firebaseAuth.getCurrentUser().getEmail())
                .orderBy("createdDate",Query.Direction.ASCENDING)
                .startAfter(lastVisible)
                .limit(2);

        //Use the nextQuery
    }
});

への呼び出しを参照してください.startAfter(lastVisible)これは、forループの最後であるために動作しますので、lastVisibleオブジェクトは、常に最後の値が保持するDocumentSnapshotオブジェクトを。

あなたのFirestoreのページネーションのための一例としての私のチュートリアルを使用するためのPSのおかげで:)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=361697&siteId=1