mam pewne dane FirebaseDatabase
który wygląda następująco:if nie zwraca poprawnych elementów na pobieranie danych z Firebase
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
mam pobierania child1
„s dane tak:
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");
}
}
...
...
...
}
i child2
„S dane, jak to:
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) {
}
});
}
a następnie w innym kodzie pobieram metodę fID
i wywołuję tam metodę.
Zalogowałem wszystkie identyfikatory Dostaję z bazy danych:
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
Oto kod Profile.java
plik za: https://gist.github.com/HammadNasir/a196bcdc6dccbf69657fca528443e680
Problem polega na tym, że w fMethod()
„s if warunek jest !lID.trim().equals(blackListedId.trim()
tak, jak widać w bazie danych, powinienem dostać wszystkie uniqueId
s pod child1
z wyjątkiem uniqueId3
i uniqueId7
, ponieważ te 2 są obecne również w child2
, ale zamiast tego otrzymuję wszystkie uniqueId
s z wyjątkiem uniqueId3
i uniqueId7
dwa razy i uniqueId3
i uniqueId7
raz.
Inną rzeczą, aby pamiętać, że kiedy robię tego warunku jako lID.trim().equals(blackListedId.trim()
, Dostaję tylko 2 identyfikatory, które odpowiadają tym wymaganiom, tj uniqueId3
i uniqueId7
i jeśli child2
ma tylko 1 id pod uniqueId11
następnie I m uzyskanie wszystkich uniqueId
s, z wyjątkiem tego, ale przyczyną 2 lub więcej identyfikatorów jest przyczyną problemu.
Mam nadzieję, że masz mój problem. Starałem się jak najlepiej wytłumaczyć to najmniejszym możliwym kodem.
Dlaczego !lID.trim().equals(blackListedId.trim()
zwraca nieoczekiwane identyfikatory i jak uzyskać tylko te identyfikatory, które spełniają ten warunek?
@Ibrahim nie znasz podstawy Firebase? –
Cóż, myślę, że twoja sprawa nie zależy od umiejętności firebooka, zależy bardziej od umiejętności debugowania, spróbuj debugować wartości i sprawdź warunki, na pewno jest to najszybsze rozwiązanie. – Ibrahim
Zapisuj wszystko, co pobieramy z serwera. Następnie opublikuj swój logcat za pomocą kodu. –