MutableLiveData设置值,但getValue()返回null吗?

时间:2019-02-25 17:29:18

标签: java android mvvm nullpointerexception android-livedata

将项目迁移到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。

1 个答案:

答案 0 :(得分:0)

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

我更改了以下代码行:

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

对此:

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