为什么我不能使用viewmodel作为LifecycleOwner观察数据?

问题描述 投票:-1回答:2

我在我的AsyncTask中使用ViewModel加载我的数据但是当我尝试观察我的片段中的数据时,我得到了异常: 引起:java.lang.ClassCastException:MainFragment无法强制转换为android.arch.lifecycle.LifecycleOwner

这是我的ViewModel:

private MutableLiveData<ArrayList<Song>> songs;
public LiveData<ArrayList<Song>> getSongs() {
    if (songs == null) {
        songs = new MutableLiveData<ArrayList<Song>>();
        loadSongs();
    }
    return songs;
}

@SuppressLint("StaticFieldLeak")
private void loadSongs() {

    new AsyncTask<Void, Void, ArrayList<Song>>() {
        @Override
        protected ArrayList<Song> doInBackground(Void... voids) {
            ArrayList<Song> data = new ArrayList<>();

            //Add songs (collapsed)

            return data;
        }

        @Override
        protected void onPostExecute(ArrayList<Song> data) {
            songs.postValue(data);
        }
    }.execute();
}

这是我的片段,我想在listview中的数据:

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

    //TODO: Fix this!
    viewModel.getSongs().observe((LifecycleOwner) this, new Observer<ArrayList<Song>>() {
        @Override
        public void onChanged(@Nullable ArrayList<Song> songs) {
            adapter = new ListViewAdapter(R.layout.songlist_customlayout, viewModel.getSongs().getValue(), getActivity());
        }
    });

这里有什么问题?

java android-fragments asynchronous mvvm android-lifecycle
2个回答
1
投票

我面对它,这是一个依赖的问题,尝试使用这个

implementation 'com.android.support:appcompat-v7:27.1.1'

或其他实现生命周期的appCompat依赖项。 AsyncTask也很老,使用workManager或Coroutines进行后台工作。我希望它会对你有所帮助


1
投票

我通过将我的项目迁移到ClassCastException来修复androidx。现在我不再得到错误了:)

© www.soinside.com 2019 - 2024. All rights reserved.