我正在询问是否可以从Firestore文档快照生成模型类,或者可以将文档快照中的字段值检索并绑定到视图,而无需模型类或模型类的对象比字段少在Firestore文档中。
例如,此代码来自文档:
public static class Post {
public String author;
public String title;
public Post(String author, String title) {
// ...
}
}
// Get a reference to our posts
final FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference ref = database.getReference("server/saving-data/fireblog/posts");
// Attach a listener to read the data at our posts reference
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
Post post = dataSnapshot.getValue(Post.class);
System.out.println(post);
}
我们希望文档具有2个字段。但是,假设它有两个以上在模型类中未声明的字段。一个人将如何检索其他字段的值并将其绑定到Android中的视图?
答案 0 :(得分:0)
首先,您谈论的是Firestore,但是您共享了与Firebase实时数据库有关的代码。如果是错误的,那就是有关Firestore的响应。
询问是否可以从Firestore文档快照生成模型类
没有任何一种方法可以简单地根据数据库中的字段创建Java类。有一些libraries可以帮助您实现目标,但这不是重点。
在没有模型类的情况下从文档快照中检索字段值并将其绑定到视图
这肯定是可能的。 DocumentSnapshot类包含get(String field)开头的get()
方法的多种样式,可以帮助获取字段的值,并且根据其类型,您可以根据需要强制转换它并以专用方法结尾像getLong(String field),getBoolean(String field)甚至getData()这样:
将文档的字段返回为Map,如果文档不存在,则返回null。
因此您无需模型类即可从Firestore获取数据。
或与Firestore文档中的字段相比具有较少对象的模型类
是的,您可以拥有一个模型类,该类具有比数据库库中更少的字段,但是目的是什么?为什么要在数据库中存储一些不想获取的数据?通常,我们只存储我们使用的数据,并且这样做是为了节省带宽和资源。
我们希望文档具有2个字段。但假设它有两个以上在模型类中未声明的字段。如何检索其他字段的值并将其绑定到android中的视图
我们假设除了数据库中的author
和title
属性外,还有另一个名为description
的属性。由于您的Post
类中不存在此属性,因此以下代码行将产生编译错误:
对于Firestore:
Post post = document.toObject(Post.class);
String description = post.description;
对于Firebase实时数据库:
Post post = dataSnapshot.getValue(Post.class);
String description = post.description;
要获取该属性的值,应使用以下代码行:
对于Firestore:
String description = document.getString("description");
对于Firebase实时数据库:
String description = dataSnapshot.child("description").getValue(String.class);