是否可以在已经运行应用程序的情况下从客户端生成对象/模型类

时间:2019-11-18 07:18:26

标签: java android firebase firebase-realtime-database google-cloud-firestore

我正在询问是否可以从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中的视图?

1 个答案:

答案 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中的视图

我们假设除了数据库中的authortitle属性外,还有另一个名为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);