首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以在应用程序已经运行的情况下从客户端生成对象/模型类?

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

Stack Overflow用户
提问于 2019-11-18 07:18:26
回答 1查看 264关注 0票数 0

我正在询问是否有可能从Firestore快照生成模型类,或者在没有模型类的情况下检索字段值并将字段值绑定到文档快照的视图中,或者使用一个对象比Fi还原文档中的字段少的模型类。

例如,在本代码中,从文档中获取:

代码语言:javascript
复制
    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);
 }

我们期望文档有两个字段。但是,假设它有两个以上的字段没有在模型类中声明。如何检索其他字段的值并将其绑定到Android中的视图?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-18 09:16:37

首先,您讨论的是Firestore,但是您共享了与Firebase实时数据库相关的代码。如果这是个错误,那就是关于Firestore的反应。

我在询问是否可以从Fi还原文档快照生成模型类。

您不可能简单地根据数据库中的字段创建Java类。有一些可以帮助您实现这一点,但这不是重点。

从文档快照中检索字段值并将其绑定到视图,而无需模型类。

这当然是可能的。DocumentSnapshot类包含get()方法的多种样式,从获取(字符串字段)开始,它可以帮助获取字段的值,根据字段的类型,您可以根据需要对其进行转换,并以诸如getLong(字符串字段)getBoolean(字符串字段)甚至getData()这样的专门方法结尾:

如果文档不存在,则以Map或null的形式返回文档的字段。

这样,您就可以在没有模型类的情况下从Firestore获取数据。

或者使用一个模型类,该类的对象比Fi还原文档中的字段要少。

是的,您可以有一个模型类,与数据库中的字段相比,这个类的字段更少,但目的是什么?为什么要在数据库中存储一些您不想得到的数据?通常,我们只存储我们使用的数据,我们这样做是为了节省带宽和资源。

我们期望文档有两个字段。但是,假设它有两个以上的字段没有在模型类中声明。如何检索其他字段的值并将其绑定到android中的视图。

让我们假设,除了数据库中的authortitle属性之外,还有一个名为description的属性。由于Post类中不存在此属性,下面的代码行将产生编译错误:

For Firestore:

代码语言:javascript
复制
Post post = document.toObject(Post.class);
String description = post.description;

用于Firebase实时数据库:

代码语言:javascript
复制
Post post = dataSnapshot.getValue(Post.class);
String description = post.description;

要获得该属性的值,应使用以下代码行:

For Firestore:

代码语言:javascript
复制
String description = document.getString("description");

用于Firebase实时数据库:

代码语言:javascript
复制
String description = dataSnapshot.child("description").getValue(String.class);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58909631

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档