query para guardar example descargar datos configurar android firebase firebase-database firebase-realtime-database

android - para - ¿Cómo obtener todos los datos del niño en la base de datos de Firebase?



guardar datos en firebase android (3)

Es posible que desee probar esto:

Firebase ref = new Firebase(FIREBASE_URL); ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot snapshot) { Log.e("Count " ,""+snapshot.getChildrenCount()); for (DataSnapshot postSnapshot: snapshot.getChildren()) { <YourClass> post = postSnapshot.getValue(<YourClass>.class); Log.e("Get Data", post.<YourMethod>()); } } @Override public void onCancelled(FirebaseError firebaseError) { Log.e("The read failed: " ,firebaseError.getMessage()); } });

Tengo esta base de datos firebase

y necesito obtener todos los números de teléfono de los usuarios, ¿qué oyente debo usar para obtener todos los niños?

Cada usuario se agrega como un objeto con ID de usuario como nombre de ese objeto, necesito recuperar estos objetos sin conocer esa ID de usuario

Busqué en la documentación, está relacionada con DataSnapshot pero no pude obtener un DataSnapshot sin un oyente. ¿Es correcto buscar un DataSnapshout o debo usar otra cosa?


Primero recupere la captura de datos de sus usuarios.

//Get datasnapshot at your "users" root node DatabaseReference ref = FirebaseDatabase.getInstance().getReference().child("users"); ref.addListenerForSingleValueEvent( new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { //Get map of users in datasnapshot collectPhoneNumbers((Map<String,Object>) dataSnapshot.getValue()); } @Override public void onCancelled(DatabaseError databaseError) { //handle databaseError } });

Luego recorra los usuarios, acceda a su mapa y recopile el campo del teléfono.

private void collectPhoneNumbers(Map<String,Object> users) { ArrayList<Long> phoneNumbers = new ArrayList<>(); //iterate through each user, ignoring their UID for (Map.Entry<String, Object> entry : users.entrySet()){ //Get user map Map singleUser = (Map) entry.getValue(); //Get phone field and append to list phoneNumbers.add((Long) singleUser.get("phone")); } System.out.println(phoneNumbers.toString()); }

Este oyente solo recuperará la captura de datos cuando se llame explícitamente. Considere almacenar una lista de números debajo de un nodo "allPhoneNumbers" además de su nodo de usuarios. Esto hará que sus instantáneas de datos sean más ligeras y fáciles de procesar al recopilar todos los números. Si ha dicho cientos de usuarios, la captura de datos de "usuarios" será demasiado grande y la lista "allPhoneNumbers" será mucho más eficiente.

El código anterior se probó en su base de datos de muestra y funciona. Sin embargo, es posible que el campo de su teléfono deba convertirse en String o int según el tipo de campo de instancia de teléfono de su usuario.


DatabaseReference ref1= FirebaseDatabase.getInstance().getReference(); DatabaseReference ref2,ref3,ref4; ref2 = ref1.child("User"); ref2.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Userlist = new ArrayList<String>(); // Result will be holded Here for (DataSnapshot dsp : dataSnapshot.getChildren()) { Userlist.add(String.valueOf(dsp.geValue())); //add result into array list } /* userlist will store all values of users, then point to every userlist item and get mobile numbers*/