का उपयोग कर डेटा पुनर्प्राप्त/प्रारूपित करने का सबसे अच्छा तरीका मैं का उपयोग Android
प्रोजेक्ट पर डेटा संग्रहण के लिए कर रहा हूं, और डेटा से निपटने के लिए Firebase Java API
का उपयोग कर रहा हूं। मुझे यकीन नहीं है कि मैं इसे यथासंभव कुशलता से कर रहा हूं, हालांकि, और डेटा को पुनर्प्राप्त करने और स्वरूपित करने के लिए मुझे सर्वोत्तम प्रथाओं पर कुछ सलाह चाहिए। मेरे Firebase
भंडार कुछ इस तरह दिखता ....फायरबेस जावा एपीआई
-POLLS
NUMPOLLS - 5
(pollskey) - NAME - Poll1
NUMELECTIONS - 2
ELECTIONS
(electionskey) - NAME - Election1
NUMNOMINATIONS - 2
NUMVOTERS - 2
NUMBERTOELECT - 1
VOTERS - (votesrkey) - NAME - Charles
NUMBER - (678) 333-4444
.
.
.
(voterskey) - ...
NOMINATIONS - (nominationskey) - NAME - Richard Nixon
NUMBEROFVOTES - 2
.
.
.
(nominationskey) - ...
.
.
.
(electionskey) - ...
.
.
.
(pollskey) - ...
तो, यहाँ उदाहरण के लिए मैं चुनाव नाम सूचीबद्ध करने के लिए एक जनमत सर्वेक्षण से बाहर सभी डेटा प्राप्त करने के लिए कोशिश कर रहा हूँ, यह चुनाव के नाम, और उम्मीदवार के नाम और संख्या है प्रत्येक चुनाव के लिए वोटों का। मैं
private static final Firebase polls = pollsFirebase.child("Polls");
protected void onCreate(Bundle savedInstanceState) {
polls.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
for (DataSnapshot child : snapshot.getChildren()) {
if (!child.getName().equals("NumPolls")) {
createPollTableAndHeaders(child);
}
}
}
});
}
तो मैं डेटा की व्यक्तिगत टुकड़े मैं क्रमिक DataSnapshots
पर getValue()
आह्वान करने और जाँच कुंजी द्वारा की जरूरत को पढ़ने के लिए आगे बढ़ना चुनाव इस तरह अपने मुख्य गतिविधि के OnCreate()
समारोह के दौरान स्तर DataSnapshot
मिलता है ... जिसके परिणामस्वरूप HashMaps
की ...
private void createPollTableAndHeaders(DataSnapshot poll) {
String pollName = "";
int numPolls;
Object p = poll.getValue();
if (p instanceof HashMap) {
HashMap pollHash = (HashMap) p;
if (pollHash.containsKey("Name")) {
pollName = (String) pollHash.get("Name");
}
if (pollHash.containsKey("Elections")) {
HashMap election = (HashMap) pollHash.get("Elections");
Iterator electionIterator = election.values().iterator();
while (electionIterator.hasNext()) {
Object electionObj = electionIterator.next();
if (electionObj instanceof HashMap) {
HashMap electionHash = (HashMap) electionObj;
if (electionHash.containsKey("Name")) {
String electionName = (String) electionHash.get("Name");
}
}
};
}
}
इस डेटा संरचना के माध्यम से नीचे ड्रिल करने के लिए एक बहुत कठिन रास्ता की तरह लगता है, और वहाँ एक बेहतर तरीका है मैं सोच रहा हूँ।
मैंने प्रलेखन में getValue(java.lang.Class<T> valueType)
विधि देखी है, लेकिन यह मेरे मामले में काम करने में सक्षम नहीं है, क्योंकि मैं रचनाकृत वस्तुओं के साथ काम कर रहा हूं और न केवल प्राचीन प्रकार के कंटेनर के लिए काम कर रहा हूं। फ़ंक्शन को कैसे पता चलता है कि Firebase
डेटा मॉडल ऑब्जेक्ट के कौन से सदस्य चर को असाइन करने के लिए है? क्या यह Firebase
सदस्य चर के साथ महत्वपूर्ण नाम से मेल खाता है, और इसलिए इन्हें संवेदनशीलता के साथ, बिल्कुल वही होना चाहिए? Firebase
के साथ यह सौदा कैसे होगा List
पर धक्का देते समय उत्पादित जैसे प्रमुख नाम उत्पन्न किए गए? रचना वस्तुओं के लिए मॉडल ऑब्जेक्ट्स कैसे बनाएं?
कूल धन्यवाद ग्रेग। घर लाने के लिए मुझे दो घंटे दें और इस तरह से लागू करने का प्रयास करें। धन्यवाद! – MassStrike
ठीक है, यह सब कुछ है जिसे मुझे शुरू करने की आवश्यकता है। धन्यवाद ग्रेग, त्वरित समर्थन की सराहना करते हैं। – MassStrike
पुराना धागा लाने के लिए खेद है, लेकिन, मैं जियोफायर का उपयोग फायरबेस के साथ कर रहा हूं और जिओलोकेशन क्लास एक डिफ़ॉल्ट कन्स्ट्रक्टर प्रदान नहीं करता है। तो, मैं इस तरह के वर्ग को deserialize कैसे आगे बढ़ना चाहिए? क्या कोई deserializer कारखाना एम्बेडेड है? धन्यवाद ! – Leonardo