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.
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; }
}
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é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
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é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);
}
}
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);
}
};
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é!
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.
Recommended Posts