2016-05-23 3 views
20

मैं एंड्रॉइड पर एक ऐप बनाने की कोशिश कर रहा हूं। मुझे यह जांचने की ज़रूरत है कि फायरबेस पर मेरे डेटाबेस का दिया गया तत्व एक बच्चे के पास दिए गए नाम के साथ है या नहीं। मुझे उम्मीद थी कि यह कुछ के साथ कुछ उपयोग करके किया जा सकता है:Google फ़ायरबेस जांचें कि क्या बच्चा मौजूद है

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 

if (rootRef.childExists("name")) { 
    //run some code 
} 

मैंने खोज की लेकिन मुझे कुछ भी उपयोगी नहीं मिला। किसी भी सहायता के लिए अग्रिम धन्यवाद।

+0

http://stackoverflow.com/a/36826793/3145960 की [समझौता डेटा Firebase में मौजूद रहने पर] –

+0

संभावित डुप्लिकेट (प्रयुक्त http://stackoverflow.com/questions/36826429/understanding-if-data-exists-in-firebase) –

उत्तर

42

संपादित 2 संयोजन में .childexists उपयोग करने का प्रयास; शीर्ष पर डालने के लायक: मुझे लगता है कि यह वास्तव में यह उल्लेख करने लायक है कि यह वास्तव में यह जांचने के लिए कि क्या कोई डेटा मौजूद है या नहीं, यह स्नैपशॉट पर सभी डेटा डाउनलोड कर रहा है। आपको यहाँ ध्यान रखना चाहिए। यदि संदर्भ विशाल है (उदा। वास्तव में रूट संदर्भ और विशिष्ट बच्चे/संपत्ति नहीं) तो आपको या तो गहरा नोड ढूंढना चाहिए जिसका उपयोग आप अस्तित्व की जांच करने या अपनी डेटा संरचना को अलग-अलग डिजाइन करने के लिए कर सकते हैं ताकि एक कुशल जांच संभव हो।

डेटाबेस संदर्भ प्रभावी रूप से उस डेटा के लिए यूआरएल है। आप वास्तव में डेटा प्राप्त करना चाहते हैं यह देखने के लिए कि कोई बच्चा मौजूद है या नहीं। यही कारण है कि जिस विधि को आप ढूंढ रहे हैं वह DataSnapshot पर है।

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
rootRef.addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    void onDataChange(DataSnapshot snapshot) { 
    if (snapshot.hasChild("name")) { 
     // run some code 
    } 
    } 
}); 

अब, यह डिज़ाइन पैटर्न थोड़ा अजीब लगता है। आप यह देखने के लिए पूरे डेटाबेस को पढ़ रहे हैं कि "नाम" मौजूद है या नहीं। आप इसे rootRef.child("name") पर सुनकर थोड़ा और अधिक कुशल बना सकते हैं और फिर यह जांच कर सकते हैं कि snapshot.exists() है या नहीं।

यदि आप सत्यापन पर सत्यापन करने की कोशिश कर रहे हैं, और प्रवाह को नियंत्रित नहीं करते हैं, तो आपको इस कोड को अपने rules.json में डालने पर विचार करना चाहिए।

संपादित: मैं मूल रूप से गलत समारोह का नाम (hasChild के बजाय childExists)

+0

बस स्पष्ट करने के लिए: क्या श्रोता के बिना फायरबेस पर डेटा तक पहुंच बनाना संभव है? – zomnombom

+2

मुझे लगता है कि आप पूछ रहे हैं क्योंकि आप कॉलबैक को चलाने के लिए नहीं चाहते हैं। उपरोक्त कोड में "एकल" का अर्थ है कि यह केवल एक बार आग लगती है। –

+0

हां। बहुत बहुत धन्यवाद! – zomnombom

संबंधित मुद्दे