【问题标题】:MutableLiveData sets value but getValue() returns null?MutableLiveData 设置值但 getValue() 返回 null?
【发布时间】:2019-02-25 17:29:18
【问题描述】:

将我的项目迁移到androidx 后,我遇到了这个问题。在迁移之前,这一切都像一个魅力(我不得不迁移我的项目)但现在我面对这个 10 分钟前不存在的奇怪问题。

场景: 片段 1 包含项目的列表视图,当用户单击项目时,我调用我的视图模型 setvalue() 方法,然后片段 2 出现以显示用户单击的项目,为此我调用我的视图模型 getvalue()。场景很简单。

片段 1:

@Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        viewModel.getClickedSong().setValue(viewModel.getSongs().getValue().get(position));

视图模型:

public MutableLiveData<Song> getClickedSong() {
    if (clickedSong == null) {
        clickedSong = new MutableLiveData<>();
    }
    return clickedSong;
}

片段 2:

viewModel.getClickedSong().observe(this, new Observer<Song>() {
                @Override
                public void onChanged(Song song) {
                    mySong = song;

我也试过:mySong = viewModel.getClickedSong().getValue(),但这也返回 null。

【问题讨论】:

    标签: java android mvvm nullpointerexception android-livedata


    【解决方案1】:

    经过数小时的研究、测试等,修复非常简单。

    我改了这行代码:

    viewModel = ViewModelProviders.of(this).get(SharedViewModel.class);
    

    到这里:

    viewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
    

    【讨论】:

    • 如您所见,问题不在于MutableLiveData,而在于您的ViewModel。由于它是SharedViewModel,因此您需要将其LifeCycleOwner 设置为ActivityApplication 类。这样,如果您将 LifeCycleOwnerViewModel 重用,您的 LiveData 属性的更改将对您的其他 ActivitiesFragments 可见。
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多