recuperar query from example datos datasnapshot data consultas android firebase if-statement firebase-database

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.