मेरे पास एक फायरबेस स्कीमा है जिसमें कुछ मानों के साथ तालिका 'कैटलॉग' है

सूची तालिका

enter image description here

मैंने ऑर्डर के रूप में avgDrinkPrice का उपयोग करके ऑर्डरबायचाइल्ड() किया और आउटपुट गलत था।

आउटपुट

enter image description here

कोड

myRef.orderByChild("avgDrinkPrice").addValueEventListener(new ValueEventListener() {
  @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            catalogList.clear();
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                Catalog catalog = postSnapshot.getValue(Catalog.class);
                catalogList.add(catalog);
                Log.d(TAG,"Drink price " + catalog.getAvgDrinkPrice());
                catalogSize++;
            }
            //LOOP ENDS.

मैंने अक्षांश क्षेत्र, देशांतर और रेटिंग जैसे अन्य संख्यात्मक मानों का उपयोग करके सॉर्ट करने का प्रयास किया है और उनके आदेश सही हैं। केवल avgDrinkPrice द्वारा क्रमित करने पर ही आदेश गलत होगा। मुझे समझ नहीं आता क्यों। कृपया मदद कीजिए।

2
James 28 जिंदा 2017, 05:42

1 उत्तर

सबसे बढ़िया उत्तर

आपके स्क्रीनशॉट के अनुसार, avgDrinkPrice प्रॉपर्टी एक string है, इसलिए परिणाम हैं सही ढंग से सॉर्ट किए गए हैं। यह सिर्फ इतना है कि उन्हें लेक्सोग्राफिक रूप से क्रमबद्ध किया जाता है - संख्यात्मक रूप से नहीं।

बच्चे द्वारा ऑर्डर करते समय Firebase डेटा को कैसे सॉर्ट करता है, इस बारे में अधिक जानकारी है, यहां< /ए>:

orderByChild() का उपयोग करते समय, निर्दिष्ट चाइल्ड कुंजी वाले डेटा को निम्नानुसार क्रमित किया जाएगा:

  1. निर्दिष्ट चाइल्ड कुंजी के लिए null मान वाले बच्चे पहले आते हैं।
  2. निर्दिष्ट चाइल्ड कुंजी के लिए false के मान वाले बच्चे आगे आते हैं। यदि एक से अधिक बच्चों का मान false है, तो उन्हें कुंजी द्वारा शब्दावली के अनुसार क्रमबद्ध किया जाता है।
  3. निर्दिष्ट चाइल्ड कुंजी के लिए सही मान वाले बच्चे आगे आते हैं। यदि एक से अधिक बच्चों का मान true है, तो उन्हें कुंजी द्वारा शब्दावली के अनुसार क्रमबद्ध किया जाता है।
  4. अंकीय मान वाले बच्चे आगे बढ़ते हैं, आरोही क्रम में क्रमबद्ध होते हैं। यदि निर्दिष्ट> चाइल्ड नोड के लिए कई बच्चों का संख्यात्मक मान समान है, तो उन्हें कुंजी द्वारा क्रमबद्ध किया जाता है।
  5. स्ट्रिंग्स संख्याओं के बाद आती हैं, और आरोही क्रम में लेक्सिकोग्राफ़िक रूप से क्रमबद्ध होती हैं। यदि निर्दिष्ट चाइल्ड नोड के लिए कई बच्चों का मान समान है, तो उन्हें कुंजी द्वारा लेक्सिकोग्राफ़िक रूप से आदेश दिया जाता है।
  6. वस्तुएं सबसे अंत में आती हैं, और आरोही क्रम में कुंजी द्वारा लेक्सिकोग्राफिक रूप से क्रमबद्ध की जाती हैं।

बच्चों को संख्यात्मक रूप से आदेश देने के लिए, आपको avgDrinkPrice को एक संख्या के रूप में संग्रहित करना होगा। और lati, longti और rating शायद संख्याओं के रूप में भी बेहतर तरीके से संग्रहीत हैं।

आपके lati, longti और rating गुणों का उपयोग करने वाले ऑर्डर संख्यात्मक प्रतीत हो सकते हैं, लेकिन ऐसा इसलिए होगा क्योंकि ऑर्डर किए जा रहे स्ट्रिंग मानों में अंकों की संख्या समान हो सकती है - जो नहीं है avgDrinkPrice के मामले में।

5
cartant 28 जिंदा 2017, 06:10