我正在尝试在一个片段上使用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>> {
在Loader的onCreateView初始化中:
LoaderManager loaderManager = getActivity().getLoaderManager();
loaderManager.initLoader(1, null, this);
在Loader的onCreateLoader内部:
@Override
public Loader<ArrayList<MovieDataCollection>> onCreateLoader(int i, Bundle bundle) {
progressBar.setVisibility(View.VISIBLE);
return new WorkerCastThread(getContext(), String.valueOf(movieId));
}
在Loader的onLoadFinished内部:
@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实现,它可以正常工作并且可以正确加载数据而没有任何错误。
MainActivity类:
public class MainActivity extends AppCompatActivity implements MoviesAdapter.MoviesAdapterOnClickHandler, LoaderManager.LoaderCallbacks<ArrayList<MovieDataCollection>> {