Использование LoaderManager.LoaderCallbacksНа фрагменте и получая ошибку: java.lang.ClassCastException - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь использовать LoaderCallbacks (импортированный из android.app.LoaderManager) для фрагмента, но когда я завершил все кодирование и попытался запустить его, он выдает мне сообщение о том, что

java.lang.ClassCastException: _.MovieDataCollection не может быть приведено к java.util.ArrayList в _.Detailed.CastFragment.onLoadFinished (CastFragment.java:34)

Реализация LoaderManager:

public class CastFragment extends Fragment implements LoaderManager.LoaderCallbacks<ArrayList<MovieDataCollection>> {

Внутри onCreateView инициализация загрузчика:

LoaderManager loaderManager = getActivity().getLoaderManager();
        loaderManager.initLoader(1, null, this);

Внутри onCreateLoader загрузчика:

@Override
public Loader<ArrayList<MovieDataCollection>> onCreateLoader(int i, Bundle bundle) {
    progressBar.setVisibility(View.VISIBLE);
    return new WorkerCastThread(getContext(), String.valueOf(movieId));
}

Внутри onLoadFinished of Loader:

@Override
public void onLoadFinished(Loader<ArrayList<MovieDataCollection>> loader, ArrayList<MovieDataCollection> movieDataCollections) {
    if (movieDataCollections == null) {
        showErrorMessage();
    } else {
        showData();
        ArrayList<String> imagePath = new ArrayList<>();
        for (int i = 0; i < movieDataCollections.size(); i++) {
            imagePath.add(movieDataCollections.get(i).getPoster_path());
        }
        castAdapter = new CastAdapter(movieDataCollections);
        recyclerView.setAdapter(castAdapter);
        recyclerView.setHasFixedSize(true);
    }
    progressBar.setVisibility(View.INVISIBLE);

}

Внутри фонового рабочего потока AsyncTaskLoader:

public class WorkerCastThread extends AsyncTaskLoader<ArrayList<MovieDataCollection>> {

private final String movieId;

public WorkerCastThread(Context context, String movieId) {
    super(context);
    this.movieId = movieId;
}

@Override
protected void onStartLoading() {
    forceLoad();
}

@Override
public ArrayList<MovieDataCollection> loadInBackground() {
    ArrayList<MovieDataCollection> movieDataCollection = null;
    NetworkUtils networkUtils = null;
    if (movieId != null) {
        networkUtils = new NetworkUtils(movieId);
    }
    if (networkUtils != null) {
        movieDataCollection = networkUtils.fetchDataCredits(movieId);

    }
    return movieDataCollection;
}

}

Подпись MovieDataCollection:

public class MovieDataCollection implements Serializable {}

Что я чувствую, потому что MovieDataCollection реализует Serializable, вот почему это происходит, но в MainActicity используется та же самая реализация LoaderManager, и она отлично работает и загружает собственные данныеy без ошибок.

MainActivity класс:

public class MainActivity extends AppCompatActivity implements MoviesAdapter.MoviesAdapterOnClickHandler, LoaderManager.LoaderCallbacks<ArrayList<MovieDataCollection>> {

enter image description here

...