from - query firebase android
si la declaraciĆ³n no devuelve los elementos correctos al recuperar datos de firebase (1)
Tengo algunos datos en FirebaseDatabase
que se ven así:
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
Estoy recuperando datos de child1
como este:
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");
}
}
...
...
...
}
y los datos de child2
como este:
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) {
}
});
}
y luego en otro código estoy recuperando fID
y llamando fData()
método fData()
allí.
Logré todos los ID que obtengo de la base de datos:
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
Aquí está el código del archivo Profile.java
: https://gist.github.com/HammadNasir/a196bcdc6dccbf69657fca528443e680
El problema es que en la fMethod()
de fMethod()
la condición es !lID.trim().equals(blackListedId.trim()
así que, como puede ver en la base de datos, debería obtener todos los uniqueId
bajo child1
excepto uniqueId3
y uniqueId7
porque estos 2 están presentes en child2
también, pero en su lugar uniqueId
todos los uniqueId
. uniqueId3
excepto uniqueId3
y uniqueId7
dos veces y uniqueId3
y uniqueId7
una vez.
Otra cosa a tener en cuenta es que cuando estoy haciendo esa condición como lID.trim().equals(blackListedId.trim()
, lID.trim().equals(blackListedId.trim()
solo los 2 id que coinciden con este requisito, es decir, uniqueId3
y uniqueId7
y si child2
tiene solo 1 id bajo uniqueId11
entonces estoy obteniendo todos los uniqueId
. uniqueId
excepto el que está aquí pero teniendo 2 o más ids está causando el problema.
Espero que tengas mi problema. Hice mi mejor esfuerzo para explicarlo con el menor código posible.
¿Por qué !lID.trim().equals(blackListedId.trim()
está devolviendo identificadores inesperados y ¿cómo puedo obtener solo los identificadores que cumplen esta condición?
El addListenerForSingleValueEvent para el secundario 2 siempre se llamará dos veces: una vez cuando lo configure y el segundo cuando haya leído todos los datos. Entonces, cuando se llama por primera vez, termina llamando a fMethod(fID, "")
que es donde obtiene todos los ID de Child 1, incluidos 3 y 7. Pero la próxima vez que lo llame, está funcionando bien. describirlo. Entonces, si elimina la condición "else"
de su ValueEventListener
, creo que debería funcionar bien.
Avíseme si entendí su pregunta y la respondí. Si no, no dude en explicar más detalles.