所以看起来在一个名为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
我认为这是因为我从第一个调用第二个加载器。如果这是不可能的,我假设有一种方法让Activity知道数据已被加载,因此它可以从UI线程启动一个新的AsyncTaskLoader,但我不知道如何做到这一点。有人可以开导我吗?感谢。
答案 0 :(得分:0)
所以问题最终是我将initLoader
的相同整数ID参数传递给原始调用,而第一个LoadManager
{{1} } 方法。我假设这导致第一个加载器返回错误的管理器的结果。