Avec la base de données en temps réel, on pourrait faire ceci:
MyPojo pojo = dataSnapshot.getValue(MyPojo.Class);
comme moyen de mapper l'objet, comment fait-on cela avec Firestore
?
CODE:
FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("app/users/" + uid).document("notifications").get().addOnCompleteListener(task -> {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document != null) {
NotifPojo notifPojo = document....// here
return;
}
} else {
Log.d("FragNotif", "get failed with ", task.getException());
}
});
Avec un DocumentSnapshot
vous pouvez faire:
DocumentSnapshot document = future.get();
if (document.exists()) {
// convert document to POJO
NotifPojo notifPojo = document.toObject(NotifPojo.class);
}
Je ne sais pas si c'est la meilleure façon de le faire, mais c'est ce que j'ai jusqu'à présent.
NotifPojo notifPojo = new Gson().fromJson(document.getData().toString(), NotifPojo.class);
EDIT: J'utilise maintenant ce qui est sur la réponse acceptée.
Java
DocumentSnapshot document = future.get();
if (document.exists()) {
// convert document to POJO
NotifPojo notifPojo = document.toObject(NotifPojo.class);
}
Kotlin
val document = future.get()
if (document.exists()) {
// convert document to POJO
val notifPojo = document.toObject(NotifPojo::class.Java)
}
Il est important de se rappeler que vous devez fournir un constructeur par défaut, sinon l'erreur de désérialisation classique se produira. Pour Java a Notif() {}
devrait suffire. Pour Kotlin initialisez vos propriétés.