Recuperación de datos específicos de FireBase (Android)

Estoy haciendo una aplicación de chat, y tengo una Firebase con la siguiente estructura. Chat1, Chat2, Chat3 … se utiliza para guardar datos de diferentes grupos de chat. Mensaje1, Mensaje2, Mensaje3 son Mensajes dentro del primer grupo., Puede ser de cualquier autor.

Charlas

  • Chat1
    • Message1
      • Autor1
      • Mensaje de texto
    • Message2
      • Autor2
      • Mensaje de texto
    • Message3
      • Autor1
      • Mensaje de texto
  • Chat2
    • Message1
      • Autor3
      • Mensaje de texto
    • Message2
      • Autor4
      • Mensaje de texto
    • Message3
      • Autor1
      • Mensaje de texto
  • Chat3

Quiero recuperar la lista de todos los mensajes de "Autor 1". Significado Message1, Message3 debe ser recuperado de Chat1 y Message3 también debe ser recuperado de Chat2. Quiero mostrar todos los mensajes de 1 autor.

ref = new Firebase(FIREBASE_URL); //Root URL ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot child : dataSnapshot.getChildren()) { for (DataSnapshot childd : child.getChildren()) { //This might work but it retrieves all the data } } } @Override public void onCancelled() { } }); 

Esto me da datos enteros! ¿Cómo puedo restringirlo a "Author1"?

3 Solutions collect form web for “Recuperación de datos específicos de FireBase (Android)”

Firebase siempre recuperará el nodo completo que solicita. Puesto que usted está pidiendo todos los chats o un chat entero a la vez (no está claro cuál usted hace de su código), eso es lo que usted consigue.

Si desea obtener menos datos de Firebase, tendrá que ser más específico en lo que pide de ella. Por ejemplo, si desea mostrar Chat1, comience escuchando a los niños del nodo Chat1.

Este fragmento proviene de la guía Firebase para Android :

 // Retrieve new posts as they are added to Firebase ref.addChildEventListener(new ChildEventListener() { // Retrieve new posts as they are added to Firebase @Override public void onChildAdded(DataSnapshot snapshot, String previousChildKey) { Map<String, Object> newPost = (Map<String, Object>) snapshot.getValue(); System.out.println("Author: " + newPost.get("author")); System.out.println("Title: " + newPost.get("title")); } //... ChildEventListener also defines onChildChanged, onChildRemoved, // onChildMoved and onCanceled, covered in later sections. }); 

Este fragmento realiza lo mismo que su ejemplo actual, pero en lugar de su código de bucle sobre los datos con un for , Firebase le alimenta el mensaje de datos de un mensaje a la vez.

Con eso en su lugar, puede filtrar los mensajes. Este es un proceso de dos pasos: primero se ordena por un nodo secundario y, a continuación, se limitan los nodos que se devuelven.

 Query query = ref.orderByChild("Author").equalTo("Author1", "Author"); query.addChildEventListener(new ChildEventListener() { // the rest of the code remains the same as above 

Este último bit se explica mejor en la documentación de Firebase sobre las consultas .

Puede utilizar la consulta para filtrar los resultados

 DatabaseReference mDatabaseReference = FirebaseDatabase.getInstance().getReference("Chat1"); Query query = mDatabaseReference.orderByChild("authorName").equalTo("Author1"); 

Además, puede utilizar otros métodos de filtro aquí: https://firebase.google.com/docs/reference/android/com/google/firebase/database/Query

No sé si esto es lo que querías decir o no, pero aquí está mi código para mi base de datos. Primero aquí está mi estructura de base de datos:

* Raíz de la base de datos

: Usuarios

:

nombre de usuario

::

:: …… "Nombre": "valor"

:: …… "E-mail": "valor"

:: …… "Contraseña": "valor"

:

nombre de usuario

::

:: …… "Nombre": "valor"

:: …… "E-mail": "valor"

:: …… "Contraseña": "valor"

Aquí está mi código para recuperar los datos de la base de datos:

 FirebaseDatabase database= FirebaseDatabase.getInstance(); DatabaseReference myRef = database.getReference().child("Users"); login=myRef.child(name); //here user will sign in using his name so it is based on user, directory will change dynamically ValueEventListener listener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { User user = dataSnapshot.getValue(User.class); String demo=user.Email; //email fetched from database } @Override public void onCancelled(DatabaseError databaseError) { } }; login.addValueEventListener(listener); 

Aquí la clase User.java contiene 3 valores de cadena de correo electrónico, contraseña y nombre.

 public class User { public String Name; public String Email; public String Password; public User() { // Default constructor required for calls to DataSnapshot.getValue(User.class) } public User(String name,String pass, String email) { this.Name = name; this.Email = email; this.Password = pass; } } 
  • ¿Hay alguna forma de obtener un teclado de software de Android que tenga sólo números (sin decimales, espacios) con código Java?
  • Problema básico de Java / Eclipse: las bibliotecas estándar no se pueden importar en el proyecto de Android
  • Incorporar Groovy en una aplicación Android Java
  • Cómo mostrar sólo la hora actual utilizando DateFormat.getDateTimeInstance () en android
  • Obtenga la imagen y el resumen relevantes de la URL
  • Daga con Android: ¿Cómo inyectar el contexto cuando se utiliza MVP?
  • Problemas incluyendo Apache HttpComponents en el proyecto de Android Gradle
  • Cómo hacer una copia de un archivo en android?
  • ¿Puedo hacer referencia al botón de OnClickListener desde dentro del listener? (androide)
  • Java se inició pero devolvió exit code = 13 eclipse
  • ¿Debo usar Java o XML para diseños de Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.