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());
}
});
DocumentSnapshot
を使用すると、次のことができます。
DocumentSnapshot document = future.get();
if (document.exists()) {
// convert document to POJO
NotifPojo notifPojo = document.toObject(NotifPojo.class);
}
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の場合、プロパティを初期化します。
これが最善の方法であるかどうかはわかりませんが、これはこれまでのところです。
NotifPojo notifPojo = new Gson().fromJson(document.getData().toString(), NotifPojo.class);
編集:私は今、受け入れられた答えにあるものを使用しています。