LiveData null после удаления элемента - PullRequest
0 голосов
/ 04 июня 2018

У меня есть объект LiveData, для которого я выполняю Transformations.map (), чтобы применить формулу к данным перед уведомлением любых наблюдателей.Однако у меня есть функция удаления в пользовательском интерфейсе, которая удаляет объект из БД (комнаты), и когда LiveData обновляется, Transformation.map () вызывает сбой со следующей ошибкой «Попытка вызвать виртуальный метод» double java.lang.Double.doubleValue () 'для нулевой ссылки на объект', так как объект, который он наблюдал, был удален из БД

Я пытался также удалить наблюдателя после первого обновления, но он по-прежнему выдает ту же ошибку.

Я разместил код ниже, у кого-нибудь есть идеи для его решения?

    public LiveData<String> getTotalValue() {
    if (totalValueLiveData == null) {
        loadTotalValue();
    }
    totalValue = Transformations.map(totalvalueLiveData, total -> String.format(Locale.getDefault(), "%.1f", UtilUserUnitsConverter.convertValue(total, userUnit)));
    return totalValue;
}

    final Observer<String> getTotalValueObserver = new Observer<String>() {
        @Override
        public void onChanged(@Nullable String totalValue) {
            if (totalValue != null) {
                totalValueTv.setText(totalValue);
            }
    viewModel.getTotalValue().removeObserver(getTotalValueObserver);
        }
    };
    viewModel.getTotalValue().observe(this, getTotalValueObserver);

1 Ответ

0 голосов
/ 24 сентября 2018

Для этого вопроса прошло 4 месяца, но проблема, скорее всего, связана с вашим методом viewModel.getTotalValue().

Transformations.map() метод создает новый объект LiveData каждый раз, когда вы вызываете его, что означаетКаждый раз, когда вы вызываете viewModel.getTotalValue(), вы получаете совершенно новый объект.

Другими словами: вы вызываете removeObserver и observe для двух разных объектов, не замечая этого.

...