为什么 dataSnapshot 在 ViewModel 中反序列化,而不是在 class extending LiveData 中反序列化?
Why is dataSnapshot deserialized in ViewModel and not in class extending LiveData?
我阅读了 Doug Stevenson Part 1, Part 2, Part 3 撰写的这些博客文章。在第 2 部分,他说
The Realtime Database SDK makes it really easy to convert a DataSnapshot into a JavaBean style object
并提到我们可以使用这行代码将 DataSnapshot 反序列化为 HotStock 对象(JavaBean class)
HotStock stock = dataSnapshot.getValue(HotStock.class)
我很困惑,因为他首先使用 Transformation.map 然后他说如果 LiveData 转换很昂贵,我们可以从 ViewModel 创建一个 MediatorLiveData 对象以将 DataSnapshot 转换为 HotStock 对象。
我的问题是:为什么我们不能只调用
HotStock stock = dataSnapshot.getValue(HotStock.class)
来自位于 class 扩展 LiveData super class 中的 ValueEventListener 上的 onDataChange() 方法,然后只需使用 setValue() 方法将 HotStock 对象直接传递给 ViewModel然后到 Activity 或 Fragment 观察 LiveData 的变化?
你可以这样做,but getValue()
传递一个 class 对象实际上有点慢(尤其是第一次,对于特定的 class),因为 SDK 必须使用反射弄清楚如何将所有字段映射到它创建的对象中。 Java reflection known to be fairly slow。但是你想用什么就看你自己了。
我阅读了 Doug Stevenson Part 1, Part 2, Part 3 撰写的这些博客文章。在第 2 部分,他说
The Realtime Database SDK makes it really easy to convert a DataSnapshot into a JavaBean style object
并提到我们可以使用这行代码将 DataSnapshot 反序列化为 HotStock 对象(JavaBean class)
HotStock stock = dataSnapshot.getValue(HotStock.class)
我很困惑,因为他首先使用 Transformation.map 然后他说如果 LiveData 转换很昂贵,我们可以从 ViewModel 创建一个 MediatorLiveData 对象以将 DataSnapshot 转换为 HotStock 对象。
我的问题是:为什么我们不能只调用
HotStock stock = dataSnapshot.getValue(HotStock.class)
来自位于 class 扩展 LiveData super class 中的 ValueEventListener 上的 onDataChange() 方法,然后只需使用 setValue() 方法将 HotStock 对象直接传递给 ViewModel然后到 Activity 或 Fragment 观察 LiveData 的变化?
你可以这样做,but getValue()
传递一个 class 对象实际上有点慢(尤其是第一次,对于特定的 class),因为 SDK 必须使用反射弄清楚如何将所有字段映射到它创建的对象中。 Java reflection known to be fairly slow。但是你想用什么就看你自己了。