web-dev-qa-db-fra.com

Firebase Firestore: Comment convertir un objet document en POJO sous Android

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());
            }
        });
11
Relm

Avec un DocumentSnapshot vous pouvez faire:

DocumentSnapshot document = future.get();
if (document.exists()) {
    // convert document to POJO
    NotifPojo notifPojo = document.toObject(NotifPojo.class);
}
12

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. 

0
Relm

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. 

0
Joel