Я пытаюсь использовать 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>> {