java - फायरस्टार-स्थानीय रूप से दो प्रश्नों का विलय



android firebase (1)

स्थानीय रूप से 2 अलग-अलग प्रश्नों को मर्ज करने के लिए, मैं आपको Tasks.whenAllSuccess() विधि का उपयोग करने की सलाह देता हूं। आप इसे प्राप्त कर सकते हैं, कोड की निम्नलिखित पंक्तियों का उपयोग कर:

FirebaseFirestore rootRef = FirebaseFirestore.getInstance();
Query firstQuery = rootRef...
Query secondQuery = rootRef...

Task firstTask = firstQuery.get();
Task secondTask = secondQuery.get();

Task combinedTask = Tasks.whenAllSuccess(firstTask, secondTask).addOnSuccessListener(new OnSuccessListener<List<Object>>() {
    @Override
    public void onSuccess(List<Object> list) {
         //Do what you need to do with your list
    }
});

जैसा कि आप देख सकते हैं, जब onSuccess() विधि को ओवरराइड करते समय परिणाम उन वस्तुओं की एक list होती है जिनके पास कार्यों का सटीक क्रम होता है जो तर्कों के रूप में पारित किए गए थे जब whenAllSuccess() विधि में।

एक और तरीका भी है और वह है Tasks.continueWith() पद्धति का उपयोग Tasks.continueWith() । लेकिन अपने ऐप के उपयोग-मामले के अनुसार, आप eiter का उपयोग कर सकते हैं जब whenAllSuccess() विधि या continueWith() विधि। कृपया यहाँ देखें आधिकारिक दस्तावेज

चूंकि फायरस्टार में कोई तार्किक OR ऑपरेटर नहीं है, इसलिए मैं स्थानीय रूप से 2 अलग-अलग प्रश्नों को मर्ज करने की कोशिश कर रहा हूं।

अब मुझे आश्चर्य है कि मैं परिणामों का उचित क्रम कैसे रख सकता हूं। जब मैं 2 प्रश्नों को स्वतंत्र रूप से चलाता हूं, तो मैं परिणामों को विशिष्ट रूप से कम नहीं कर सकता (कम से कम उस क्रम में नहीं जिसमें मुझे orderBy से orderBy विधि से परिणाम orderBy )।

मेरा विचार 1 क्वेरी के onSuccessListener के अंदर दूसरा प्रश्न रखना था। क्या यह एक बुरा विचार प्रदर्शन है?

public void loadNotes(View v) {
    collectionRef.whereLessThan("priority", 2)
            .orderBy("priority")
            .get()
            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                @Override
                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

                    for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                        Note note = documentSnapshot.toObject(Note.class);
                        //adding the results to a List
                    }

                    collectionRef.whereGreaterThan("priority", 2)
                            .orderBy("priority")
                            .get()
                            .addOnSuccessListener(new OnSuccessListener<QuerySnapshot>() {
                                @Override
                                public void onSuccess(QuerySnapshot queryDocumentSnapshots) {

                                    for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
                                        Note note = documentSnapshot.toObject(Note.class);
                                        //adding the results to a List
                                    }
                                }
                            });
                }
            });
}




google-cloud-firestore