Ich wollte etwas tun, das die RecyclerView-Anzeige jedes Mal aktualisiert, wenn die Firestore-Daten aktualisiert wurden, aber es fiel mir schwer, weil keine Artikel auf Japanisch geschrieben waren.
In diesem Artikel finden Sie unter Firebase-Benutzeroberfläche für Cloud-Firestore und verwenden Sie ** Firestore Recycler Adapter **, um eine Chat-App zu erstellen. Ich werde es schaffen.
Wenn Sie noch keine Datenbank in Firestore erstellt haben, lesen Sie bitte Try Cloud Firestore.
Dies ist ein Modell der Daten, aus denen der Chat der Chat-App besteht.
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; }
}
Importieren Sie zunächst die Firebase-Benutzeroberfläche für Cloud Firestore. Hierfür verwenden Sie den Firestore Recycler Adapter.
app/build.gradle
implementation "com.firebaseui:firebase-ui-firestore:6.2.1"
Erstellen Sie eine Abfrage für die Sammlung "Chats".
MainActivity.java
Query query = FirebaseFirestore.getInstance()
.collection("chats")
.orderBy("timestamp")
.limit(50); //Holen Sie sich die neuesten 50
Ich werde die zuvor erstellte Abfrage eingeben. Fügen Sie in Chat.class Ihre eigene Modellklasse ein.
MainActivity.java
FirestoreRecyclerOptions<Chat> options = new FirestoreRecyclerOptions.Builder<Chat>()
.setQuery(query, Chat.class)
.build();
Mit dem obigen Code werden die von der Abfrage erhaltenen Daten automatisch in die "Chat-Klasse" eingefügt. Wenn Sie sie jedoch aus irgendeinem Grund selbst einfügen möchten, gehen Sie wie folgt vor.
MainActivity.java
FirestoreRecyclerOptions<Chat> options = new FirestoreRecyclerOptions.Builder<Chat>()
.setQuery(query, new SnapshotParser<Chat>() {
@Override
public Chat parseSnapshot(@NonNull DocumentSnapshot snapshot) {
/*Schreiben Sie den Vorgang, den Sie beim Erstellen eines Schnappschusses ausführen möchten*/
name = snapshot.getString("mName");
message = snapshot.getString("mMessage");
uid = snapshot.getString("mUid");
Chat chat = new Chat(name,message,uid);
return chat;
}
})
.build();
Erstellen Sie eine Klasse, die von RecyclerView.ViewHolder erbt.
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);
}
}
Adapter werden durch Erben des Firestore Recycler-Adapters erstellt.
MainActivity.java
FirestoreRecyclerAdapter adapter = new FirestoreRecyclerAdapter<Chat, ChatHolder>(options) {
@Override
public void onBindViewHolder(ChatHolder holder, int position, Chat model)
{
//Ich werde ein Objekt der Chat-Klasse in ChatHolder einfügen
holder.setMessage(model.getMessage());
holder.setName(model.getName());
}
@Override
public ChatHolder onCreateViewHolder(ViewGroup group, int i) {
//Hier erstellen wir eine Instanz von ViewHolder
View view = LayoutInflater.from(group.getContext())
.inflate(R.layout.message, group, false);
return new ChatHolder(view);
}
};
Ohne Hörer geht es nicht. Ich war hier ein bisschen süchtig. .. ..
MainActivity.java
@Override
protected void onStart() {
super.onStart();
adapter.startListening();
}
@Override
protected void onStop() {
super.onStop();
adapter.stopListening();
}
das ist alles! Danke für deine harte Arbeit!
Sie sollten in der Lage sein, damit zu gehen! Bitte lassen Sie mich wissen, wenn Sie Fehler oder Fragen haben! Lassen Sie uns unser Bestes für die Android-Entwicklung geben! Wenn Sie möchten, bitte LGTM.
Recommended Posts