para - Android Firebase, simplemente obtenga los datos de un objeto hijo
guardar datos en firebase android (4)
Guardo mis datos de esta manera:
accountsTable ->
key1 -> account1
key2 -> account2
para obtener datos de objetos:
accountsDb = mDatabase.child("accountsTable");
accountsDb.child("some key").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
try{
Account account = snapshot.getChildren().iterator().next()
.getValue(Account.class);
} catch (Throwable e) {
MyLogger.error(this, "onCreate eror", e);
}
}
@Override public void onCancelled(DatabaseError error) { }
});
He estado buscando una forma de obtener los datos de un objeto hijo en Android Firebase.
He encontrado cosas como Firebase recuperar Android niño . Todas las soluciones sugieren utilizar un "ChildEventListener", sin embargo, necesito obtener estos datos en este momento, no cuando se mueven, eliminan, actualizan, etc.
Mis datos se guardan en https: //.firebaseio.com/users//creation como una cadena. Me imagino que debe haber alguna forma simple de acceder a eso sin tener que hacer demasiado, porque si copio la URL exacta en mi navegador, puedo ver la: ''creación:'' 2015/05/31 21:33:55 '''' ahí en mi "Firebase Forge Dashboard".
¿Cómo puedo acceder a esto sin un oyente?
Usted no lee directamente un valor. Puede establecerlo con .setValue()
, pero no hay .getValue () en el objeto de referencia.
Tienes que usar un oyente. Si solo desea leer el valor una vez, use ref.addListenerForSingleValueEvent()
.
Ejemplo:
Firebase ref = new Firebase("YOUR-URL-HERE/PATH/TO/YOUR/STUFF");
ref.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String value = (String) dataSnapshot.getValue();
// do your stuff here with value
}
@Override
public void onCancelled(FirebaseError firebaseError) {
}
});
Fuente: https://www.firebase.com/docs/android/guide/retrieving-data.html#section-reading-once
solo obtengo datos de nodo específicos y funciona perfecto para mí
mFirebaseInstance.getReference("yourNodeName").getRef().addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot : dataSnapshot.getChildren()) {
Log.e(TAG, "======="+postSnapshot.child("email").getValue());
Log.e(TAG, "======="+postSnapshot.child("name").getValue());
}
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.e(TAG, "Failed to read app title value.", error.toException());
}
});
Los oyentes de Firebase disparan tanto para los datos iniciales como para los cambios.
Si está buscando sincronizar los datos en una colección, use ChildEventListener
. Si está buscando sincronizar un solo objeto, use ValueEventListener
. Tenga en cuenta que en ambos casos no está "obteniendo" los datos. Lo está sincronizando, lo que significa que la devolución de llamada se puede invocar varias veces: para los datos iniciales y siempre que los datos se actualicen.
Esto está cubierto en la guía de inicio rápido de Firebase para Android . El código relevante y la cita:
FirebaseRef.child("message").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot snapshot) {
System.out.println(snapshot.getValue()); //prints "Do you have data? You''ll love Firebase."
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
En el ejemplo anterior, el evento de valor se activará una vez para el estado inicial de los datos, y luego nuevamente cada vez que cambie el valor de esos datos.
Por favor, dedique unos minutos a pasar por ese comienzo rápido. No debería tomar más de 15 minutos y le evitará muchos arañazos y preguntas. La Guía de Firebase para Android es probablemente un buen próximo destino, específicamente para esta pregunta: https://firebase.google.com/docs/database/android/read-and-write