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*/