【问题标题】:LiveData null after deleting item删除项目后 LiveData null
【发布时间】:2018-06-04 16:41:39
【问题描述】:

我有 LiveData 对象,我对其执行 Transformations.map() 以在通知任何观察者之前将公式应用于数据。但是,我在 UI 上有一个删除功能,可以从数据库(房间)中删除对象,当 LiveData 更新时,Transformation.map() 会导致崩溃并出现以下错误“尝试调用虚拟方法'double java.lang .Double.doubleValue()' on a null object reference" 因为它正在观察的对象已从数据库中删除

我也尝试在第一次更新后删除观察者,但它仍然抛出相同的错误。

下面的代码我贴出来了,大家有什么解决办法吗?

    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);

【问题讨论】:

    标签: android android-room android-architecture-components android-livedata


    【解决方案1】:

    这个问题已经4个月了,但问题更有可能出自您的viewModel.getTotalValue()方法。

    Transformations.map() 方法每次调用它都会创建一个新的 LiveData 对象,这意味着每次调用viewModel.getTotalValue() 都会得到一个全新的对象。

    换句话说:你在两个不同的对象上调用removeObserver 和observe 却没有注意到。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-01-21
      • 2021-09-02
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多