android - अगर बयान फायरबसे से डेटा को पुनः प्राप्त करने पर सही तत्व नहीं लौट रहा है



firebase if-statement (1)

बच्चे के लिए addListenerForSingleValueEvent दो बार हमेशा दो बार कहलाएगा - एक बार जब आप इसे सेट अप करते हैं और दूसरा जब उसने सभी डेटा पढ़ा है तो जब इसे पहली बार कहा जाता है, तो यह fMethod(fID, "") को कॉल करना समाप्त करता है, जहां पर आप 3 और 7 सहित बाल 1 से सभी आईडी प्राप्त कर रहे हैं। लेकिन अगली बार जब यह कॉल करता है, तो यह ठीक है जैसा कि आप इसका वर्णन करें। इसलिए यदि आप अपने child2 ValueEventListener से "else" स्थिति निकाल ValueEventListener , तो मुझे लगता है कि यह ठीक काम करना चाहिए।

मुझे बताएं कि क्या मैंने आपका प्रश्न समझ लिया और इसका जवाब दिया। यदि नहीं, तो अधिक विवरण समझाओ।

मेरे पास FirebaseDatabase में कुछ डेटा है जो इस तरह दिखता है:

app
 -child1
   -uniqueId1
     -pId1
     -lId1
   -uniqueId2
     -pId2
     -lId2
   -uniqueId3
     -pId3
     -lId3
   -uniqueId4
     -pId4
     -lId4
   -uniqueId5
     -pId5
     -lId5
   -uniqueId6
     -pId6
     -lId6
 -child2
   -uniqueIdA1
     -uniqueId7
     -uniqueId8
     -uniqueId9
     -uniqueId10
     -uniqueId11
     -uniqueId1
     -uniqueId2
     -uniqueId3
     -uniqueId4
     -uniqueId5

मैं इस तरह child1 के डेटा को पुनः प्राप्त कर रहा हूँ:

public void fMethod(final String fID, final String blackListedId) {
        mDatabase.child("child1").addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(DataSnapshot dataSnapshot, String s) {
                if (dataSnapshot.getValue() != null) {
                    Profile profile = dataSnapshot.getValue(Profile.class);
                    String pID = profile.getPID();
                    String lID = profile.getLID();
                    if (!pID.trim().equals(AccessToken.getCurrentAccessToken().getUserId().trim())) {
                        if (pID.trim().equals(fID.trim())) {
                            if (!lID.trim().equals(blackListedId.trim())) {
                            // populate the view with elements which meet this condition/requirement

                            String listingID = profile.getlID();
                            Log.d("LISTING_IDS", listingID);

                            } else {
                                Log.d("dataSnapshot", "null1");
                            }
                        } else {
                            Log.d("dataSnapshot", "null2");
                        }
                    } else {
                        Log.d("dataSnapshot", "null3");
                    }
                } else {
                    Log.d("dataSnapshot", "null4");
                }
            }
            ...
            ...
            ...
    }

और child2 के डेटा इस तरह से:

public void fData(final String fID) {

        mDatabase.child("child2").child(AccessToken.getCurrentAccessToken().getUserId()).addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.getValue() != null) {
                    for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
                        String blackListedId = childSnapshot.getValue().toString();
                        fMethod(fID, blackListedId);
                    }
                } else {
                    fMethod(fID, "");
                }
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
    }

और फिर दूसरे कोड में मैं fID पुनः प्राप्त कर रहा हूं और fData() विधि को बुला रहा हूं।

मैंने सभी आईडी को डेटाबेस से प्राप्त कर लिया है:

D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId1
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId2
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId3
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId4
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5
D/LISTING_IDS: uniqueId5

यहां Profile.java फ़ाइल का कोड: https://gist.github.com/HammadNasir/a196bcdc6dccbf69657fca528443e680

समस्या यह है कि fMethod() के if स्टेटमेंट में हालत है !lID.trim().equals(blackListedId.trim() , जैसा कि आप डेटाबेस में देख सकते हैं, मुझे uniqueId uniqueId3 uniqueId7 क्योंकि ये 2 बच्चे 2 में मौजूद हैं, लेकिन इसके बजाय मुझे uniqueId uniqueId3 और uniqueId7 uniqueId3 को छोड़कर सभी अद्वितीय uniqueId मिल रही हैं, दो बार और uniqueId3 और uniqueId7 एक बार।

एक और बात यह है कि जब मैं उस स्थिति को lID.trim().equals(blackListedId.trim() रूप में बना रहा lID.trim().equals(blackListedId.trim() , मैं केवल 2 आईडी प्राप्त कर रहा हूं जो इस आवश्यकता से मेल खाता है, अर्थात, uniqueId3 और uniqueId7 और अगर child2 uniqueId11 आईडी 11 के तहत केवल 1 आईडी है, तो मैं यहां सभी को छोड़कर सभी uniqueId11 आईडी प्राप्त कर रहा हूं, लेकिन 2 या अधिक आईडी होने से समस्या उत्पन्न हो रही है

मुझे आशा है कि आपको मेरी समस्या है मैंने इसे सबसे कम संभव कोड के साथ समझाया था।

क्यों !lID.trim().equals(blackListedId.trim() अप्रत्याशित आईडी लौट रहा है और मैं केवल इस !lID.trim().equals(blackListedId.trim() को कैसे प्राप्त कर सकता हूं जो इस स्थिति से मिलते हैं?





firebase-database