Android Concevoir et comprendre comment récupérer des données en temps réel à partir de la base de données Firebase


Exemple

Cet exemple suppose que vous avez déjà configuré une base de données Firebase Realtime. Si vous êtes un démarreur, alors s'il vous plaît informez-vous ici sur la façon d'ajouter Firebase à votre projet Android.

Tout d'abord, ajoutez la dépendance de la base de données Firebase au fichier build.gradle au niveau de l'application:

compile 'com.google.firebase:firebase-database:9.4.0'

Maintenant, laissez-nous créer une application de chat qui stocke les données dans la base de données Firebase.

Étape 1: Créer une classe nommée Chat

Il suffit de créer une classe avec certaines variables de base requises pour le chat:

public class Chat{
    public String name, message;
}

Étape 2: créer des données JSON

Pour envoyer / récupérer des données vers / depuis la base de données Firebase, vous devez utiliser JSON. Supposons que certaines discussions sont déjà stockées au niveau racine dans la base de données. Les données de ces chats peuvent ressembler à ceci:

[
    {
        "name":"John Doe",
        "message":"My first Message"
    },
    {
        "name":"John Doe",
        "message":"Second Message"
    },
    {
        "name":"John Doe",
        "message":"Third Message"
    }
]

Étape 3: Ajouter les auditeurs

Il existe trois types d'auditeurs. Dans l'exemple suivant, nous allons utiliser le childEventListener :

DatabaseReference chatDb = FirebaseDatabase.getInstance().getReference() // Referencing the root of the database.
        .child("chats"); // Referencing the "chats" node under the root.

chatDb.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String s) {
        // This function is called for every child id chat in this case, so using the above
        // example, this function is going to be called 3 times.
        
        // Retrieving the Chat object from this function is simple.
        Chat chat; // Create a null chat object.

        // Use the getValue function in the dataSnapshot and pass the object's class name to
        // which you want to convert and get data. In this case it is Chat.class.
        chat = dataSnapshot.getValue(Chat.class);

        // Now you can use this chat object and add it into an ArrayList or something like
        // that and show it in the recycler view.
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String s) {
        // This function is called when any of the node value is changed, dataSnapshot will
        // get the data with the key of the child, so you can swap the new value with the
        // old one in the ArrayList or something like that.

        // To get the key, use the .getKey() function.
        // To get the value, use code similar to the above one.
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {
        // This function is called when any of the child node is removed. dataSnapshot will
        // get the data with the key of the child.

        // To get the key, use the s String parameter .
    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String s) {
        // This function is called when any of the child nodes is moved to a different position.

        // To get the key, use the s String parameter.
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        // If anything goes wrong, this function is going to be called.

        // You can get the exception by using databaseError.toException();
    }
});

Étape 4: Ajouter des données à la base de données

Créez simplement un objet de classe Chat et ajoutez les valeurs comme suit:

Chat chat=new Chat();
chat.name="John Doe";
chat.message="First message from android";

Maintenant, obtenez une référence au nœud de chats comme lors de la session de récupération:

DatabaseReference chatDb = FirebaseDatabase.getInstance().getReference().child("chats");

Avant de commencer à ajouter des données, gardez à l'esprit que vous avez besoin d'une référence de plus, car un nœud de discussion a plusieurs autres nœuds et l'ajout d'un nouveau chat implique l'ajout d'un nouveau nœud contenant les détails de la discussion. Nous pouvons générer un nom nouveau et unique du noeud à l'aide de la fonction push() sur l'objet DatabaseReference , qui renverra une autre DatabaseReference , qui à son tour pointe sur un noeud nouvellement formé pour insérer les données de discussion.

Exemple

// The parameter is the chat object that was newly created a few lines above.
chatDb.push().setValue(chat);

La fonction setValue() s'assurera que toutes les fonctions onDataChanged de l'application sont appelées (y compris le même périphérique), qui se trouve être l'écouteur attaché du nœud "chats".