web-dev-qa-db-ja.com

Firebase Firestore:ドキュメントオブジェクトをPOJOに変換する方法Android

Realtime Databaseを使用すると、これを行うことができます。

MyPojo pojo  = dataSnapshot.getValue(MyPojo.Class);

オブジェクトをマップする方法として、Firestoreを使用してこれを行うにはどうすればよいですか?

コード:

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

DocumentSnapshotを使用すると、次のことができます。

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

Java

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

コトリン

_ val document = future.get()
 if (document.exists()) {
    // convert document to POJO
     val notifPojo = document.toObject(NotifPojo::class.Java)
  }
_

デフォルトのコンストラクターを提供する必要があることを覚えておくことが重要です。そうしないと、古典的な逆シリアル化エラーが発生します。 Javaの場合、Notif() {}で十分です。 Kotlinの場合、プロパティを初期化します。

1
Joel

これが最善の方法であるかどうかはわかりませんが、これはこれまでのところです。

NotifPojo notifPojo = new Gson().fromJson(document.getData().toString(), NotifPojo.class);

編集:私は今、受け入れられた答えにあるものを使用しています。

0
Relm