Почему dataSnapshot десериализован в ViewModel, а не в классе, расширяющем LiveData? - PullRequest
0 голосов
/ 17 марта 2020

Я читаю эти записи в блоге, написанные Дугом Стивенсоном Часть 1 , Часть 2 , Часть 3 . Во второй части он говорит, что

SDK базы данных в реальном времени действительно упрощает преобразование DataSnapshot в объект стиля JavaBean

и упоминает, что мы можем использовать эту строку код для десериализации DataSnapshot в объект HotStock (класс JavaBean)

HotStock stock = dataSnapshot.getValue (HotStock.class)

Я запутался, потому что он сначала использует Transformation.map, а затем говорит, что если преобразование LiveData стоит дорого, мы можем создать объект MediatorLiveData из ViewModel, чтобы преобразовать DataSnapshot в объект HotStock.

Мой вопрос: почему мы не можем просто вызвать

HotStock stock = dataSnapshot.getValue (HotStock.class)

из onDataChange () в методе ValueEventListener, который находится в классе, расширяющем суперкласс LiveData, а затем просто использует метод setValue () для передачи объекта HotStock непосредственно в ViewModel, а затем в Activity или Fragment, отслеживающих изменения в LiveData?

1 Ответ

0 голосов
/ 17 марта 2020

Вы можете сделать это, but getValue() передача объекта класса на самом деле довольно медленная (особенно в первый раз, для определенного класса), потому что SDK должен использовать отражение, чтобы выяснить, как отобразить все поля в объект это создает. Java отражение, как известно, довольно медленное . Но это зависит от вас, что вы хотите использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...