因此,在一个名为ActivityClass:的类中似乎有以下模式
private static class AsyncTaskLoader1 extends AsyncTaskLoader<E> {
........
}
private static class AsyncTaskLoader2 extends AsyncTaskLoader<F> {
.........
}
private class LoaderManager1 extends LoaderManager.LoaderCallbacks<E> {
private void onLoadFinished(AsyncTaskLoader1 loader, E data) {
//do stuff with data
//ok, now we need to start a asynchronous data load based on info we got back from 1st
ActivityClass.this.getLoaderManager().init(0, null, new LoaderManager2()).forceLoad();
}
}
private class LoaderManager2 extends LoaderManager.LoaderCallbacks<D> {
//...
}
这导致以下运行时异常,看起来像:
java.lang.ClassCastException: E cannot be cast to F
at com.mycompany.myapp.ActivityClass$LoaderManager2.onLoadFinished
我想这是因为我正在调用第一个加载器中的第二个加载器。如果这不可能,我假设有一种方法可以让"活动"知道数据已经加载,这样它就可以从UI线程启动一个新的AsyncTaskLoader,但我不知道如何做到这一点。有人能启发我吗?谢谢
因此,最终的问题是,对于原始调用和第一个LoadManager
的onLoadFinished
方法中的调用,我都向initLoader
传递了相同的整数ID参数。我认为这是导致第一个加载程序返回到错误的管理器的结果。