Почему я не могу наблюдать данные с viewmodel как LifecycleOwner? - PullRequest
0 голосов
/ 24 февраля 2019

Я загружаю свои данные, используя 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();
}

И это мой фрагмент, где яхочу, чтобы мои данные были в моем списке:

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

В чем здесь проблема?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Я исправил ClassCastException, перенеся мой проект на androidx.Теперь я больше не получаю ошибку:)

0 голосов
/ 24 февраля 2019

Я сталкивался с этим, это проблема с зависимостями, попробуйте использовать эту

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

или другую зависимость appCompact, которая реализует жизненный цикл.Также AsynkTask очень старый, используйте workManager или Coroutines для фоновой работы.Я надеюсь, что это поможет вам

...