当前位置: 首页 > 知识库问答 >
问题:

为什么dataSnapshot在ViewModel中反序列化,而不是在扩展LiveData的类中反序列化?

龙逸清
2023-03-14

我读了Doug Stevenson写的这些博客文章,第1部分,第2部分,第3部分。在第二部分,他说

Realtime Database SDK使将DataSnapshot转换为JavaBean样式的对象变得非常容易

并提到我们可以使用这行代码将DataSnapshot反序列化为HotStock对象(一个JavaBean类)

HotStock stock=datasnapshot.getValue(HotStock.class)

我很困惑,因为他首先使用transformation.map,然后他说如果LiveData转换很昂贵,我们可以从ViewModel创建一个MediatorLiveData对象,将DataSnapshot转换为HotStock对象。

HotStock stock=datasnapshot.getValue(HotStock.class)

从ValueEventListener上的onDataChange()方法扩展LiveData超级类,然后简单地使用setValue()方法将HotStock对象直接传递给ViewModel,然后传递给活动或片段,观察对LiveData的更改?

共有1个答案

楚望
2023-03-14

您可以这样做,但是getValue()传递类对象实际上有点慢(尤其是第一次,对于特定的类),因为SDK必须使用反射来确定如何将所有字段映射到它创建的对象中。众所周知,Java反射相当慢。但你想用什么取决于你。

 类似资料:
  • 本文向大家介绍什么是序列化与反序列化?相关面试题,主要包含被问及什么是序列化与反序列化?时的应答技巧和注意事项,需要的朋友参考一下 序列化:将对象状态转换为可保持或传输的格式的过程。将对象实例的字段及类的名称转换成字节流,然后把字节流写入数据流 反序列化:将流转换为对象。 这两个过程结合起来,可以轻松地存储和传输数据。    

  • 问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于你

  • 问题内容: 我有一个发送到服务器或从服务器发送的用户对象。发送用户对象时,我不想将哈希密码发送给客户端。因此,我添加了password属性,但这也阻止了将其反序列化为密码,这使得在没有密码的情况下很难注册用户。 我怎样才能只应用序列化而不是反序列化?我使用的是Spring JSONView,因此对的控制不多。 我尝试过的事情: 添加到属性 仅添加getter方法 问题答案: 确切的操作方法取决于你

  • 问题内容: 我已经开始在我的第一个android应用程序上进行工作,并且具有处理多层图像的应用程序。我能够将项目文件的平面版本导出为PNG,但我希望能够保存分层图像以供以后编辑(包括应用于某些层的任何选项,例如基于文本的层)。 无论如何,我已经确保需要写入文件的类是“可序列化的”,但是由于android.graphics.Bitmap不可序列化这一事实而遇到了一些障碍。以下代码实质上将位图作为PN

  • 问题内容: 说我有以下课程: 产生JSON: 如何将其反序列化回Parent类?我可以使用@JsonCreator 但这也会有效地添加到Parent类,因为所有属性都映射到此处。因此,如果您希望未知的JSON字段引发异常,则必须自己执行此操作。另外,如果映射值可能不是字符串,则必须进行一些手动类型检查和转换。杰克逊有办法自动处理此案吗? 编辑: 我可能疯了,但是尽管在文档中没有明确提及,但实际上这

  • 我想通过扩展默认的反序列化器来创建自己的反序列化器,在其后面设置更多的值: 如您所见,我还想将此DTO母类重用于其他DTO。 我没有找到任何这样的例子。我真的是世界上第一个 反序列化的“AsUsual”(p,ctxt)应该是什么 我应该使用什么motherclass?JsonDeserializer/StdDeserializer/UntypedObjectDeserializer 反序列化程序会