Afficher les données Firestore dans RecyclerView [Java]

Je voulais faire quelque chose qui mettrait à jour l'affichage de RecyclerView à chaque fois que les données Firestore étaient mises à jour, mais j'ai eu du mal car il n'y avait pas d'articles écrits en japonais.

Dans cet article, reportez-vous à Firebase UI for Cloud Firestore et utilisez ** Firestore Recycler Adapter ** pour créer une application de chat. Je vais y arriver.

Si vous n'avez pas encore créé de base de données dans Firestore, veuillez consulter Essayer Cloud Firestore.

Modèle de données à afficher

Ceci est un modèle des données qui composent le chat de l'application de chat.

Chat.java


public class Chat {
    private String mName;
    private String mMessage;
    private String mUid;
    private Date mTimestamp;

    public Chat() { } // Needed for Firebase

    public Chat(String name, String message, String uid) {
        mName = name;
        mMessage = message;
        mUid = uid;
    }

    public String getName() { return mName; }

    public void setName(String name) { mName = name; }

    public String getMessage() { return mMessage; }

    public void setMessage(String message) { mMessage = message; }

    public String getUid() { return mUid; }

    public void setUid(String uid) { mUid = uid; }

    @ServerTimestamp
    public Date getTimestamp() { return mTimestamp; }

    public void setTimestamp(Date timestamp) { mTimestamp = timestamp; }
}

Préparation de l'interface utilisateur Firebase

Tout d'abord, importez l'interface utilisateur Firebase pour Cloud Firestore. Ceci consiste à utiliser l'adaptateur Firestore Recycler.

app/build.gradle


implementation "com.firebaseui:firebase-ui-firestore:6.2.1"

Créer une requête

Créez une requête pour la collection "chats".

MainActivity.java


Query query = FirebaseFirestore.getInstance()
        .collection("chats")
        .orderBy("timestamp")
        .limit(50); //Obtenez les 50 dernières

Ensemble de requêtes

Je vais mettre dans la requête créée plus tôt. Dans Chat.class, placez votre propre classe de modèle.

MainActivity.java


FirestoreRecyclerOptions<Chat> options = new FirestoreRecyclerOptions.Builder<Chat>()
        .setQuery(query, Chat.class)
        .build();

Le code ci-dessus placera automatiquement les données obtenues par la requête dans la "Classe de discussion", mais si vous souhaitez les mettre vous-même pour une raison quelconque, procédez comme suit.

MainActivity.java



FirestoreRecyclerOptions<Chat> options = new FirestoreRecyclerOptions.Builder<Chat>()
        .setQuery(query, new SnapshotParser<Chat>() {
        @Override
        public Chat parseSnapshot(@NonNull DocumentSnapshot snapshot) {
            /*Écrivez le processus que vous souhaitez effectuer lors de la prise d'un instantané*/
            name = snapshot.getString("mName");
            message = snapshot.getString("mMessage");
            uid = snapshot.getString("mUid");
            Chat chat = new Chat(name,message,uid);
            return chat;
       }
       })
      .build();

Créer un ViewHolder

Créez une classe qui hérite de RecyclerView.ViewHolder.

ChatHolder.java


public class ChatHolder extends RecyclerView.ViewHolder {

    public TextView messsageText;
    public TextView nameText;

    public ChatHolder(View itemView) {
        super(itemView);
        messsageText = itemView.findViewById(R.id.message_text);
        nameText = itemView.findViewById(R.id.name_text);
    }
    
   public void setMessage(String message){
       messsageText.setText(message);
   }
   
   public void setName(String name){
       nameText.setText(name);
   }
}

Créer un adaptateur

Les adaptateurs sont créés en héritant de l'adaptateur Firestore Recycler.

MainActivity.java


FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<Chat, ChatHolder>(options) {
    @Override
    public void onBindViewHolder(ChatHolder holder, int position, Chat model) 
    {
        //Je vais mettre un objet de la classe Chat dans ChatHolder
        holder.setMessage(model.getMessage());
        holder.setName(model.getName());
    }

    @Override
    public ChatHolder onCreateViewHolder(ViewGroup group, int i) {
        //Ici, nous allons créer une instance de ViewHolder
        View view = LayoutInflater.from(group.getContext())
                .inflate(R.layout.message, group, false);

        return new ChatHolder(view);
    }
};

[N'oubliez pas] Inscription des auditeurs

Cela ne fonctionnera pas sans un auditeur. J'étais un peu accro ici. .. ..

MainActivity.java


@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

c'est tout! Je vous remercie pour votre travail acharné!

en conclusion

Vous devriez pouvoir y aller! Faites-moi savoir si vous avez des erreurs ou des questions! Faisons de notre mieux pour le développement Android! Si vous le souhaitez, veuillez LGTM.

référence

Recommended Posts

Afficher les données Firestore dans RecyclerView [Java]
Importer des données Excel avec Java 2
Importer des données Excel avec Java
Importer des données Excel avec Java 3
[Pour les débutants] Exemple minimum pour afficher RecyclerView en Java
Créer des données binaires de longueur variable en Java
Afficher la boîte de dialogue de message avec java (mémo personnel)
Partition en Java
Changements dans Java 11
Janken à Java
Taux circonférentiel à Java
FizzBuzz en Java
Comment afficher une page Web en Java
Afficher le texte en tant qu'art ASCII en Java (jfiglet)
Afficher les données SIG dans Elastic Search dans QGIS via GeoServer
Mémo organisé dans la tête (Java - type de données)
Afficher "Hello World" dans le navigateur à l'aide de Java
Afficher "Hello World" dans le navigateur à l'aide de Java
Définissez un affichage contextuel pour le langage Java avec vim.
Lire JSON en Java
Implémentation de l'interpréteur par Java
Faites un blackjack avec Java
Application Janken en Java
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
Vectoriser et imager les données d'images numériques manuscrites MNIST avec Java
[Java] Type de données ①-Type de base
Fonctions Azure en Java
Formater XML en Java
Simple htmlspecialchars en Java
Comment créer un URI de données (base64) en Java
Implémentation Boyer-Moore en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
Exécuter des commandes en Java (ping)
Divers threads en java
Implémentation du tri de tas (en java)
API Zabbix en Java
Art ASCII à Java
Comparer des listes en Java
POST JSON en Java
Exprimer l'échec en Java
[Java] Principaux types de données
Créer JSON en Java
Manipulation de la date dans Java 8
Nouveautés de Java 8
Utiliser PreparedStatement en Java
Nouveautés de Java 9,10,11
Exécution parallèle en Java
Types de données de base Java
Exemple de code Java pour acquérir et afficher les données source et de destination DBLINK dans Oracle Database à l'aide de DBLINK
Faisons une application de calcul avec Java ~ Afficher la fenêtre de l'application
Obtenez les prévisions météorologiques de Watson Weather Company Data avec Java simple