从第一个开始第二个AsyncTaskLoader

时间:2014-09-09 15:40:53

标签: java android android-asynctask

所以看起来在一个名为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,但我不知道如何做到这一点。有人可以开导我吗?感谢。

1 个答案:

答案 0 :(得分:0)

所以问题最终是我将initLoader的相同整数ID参数传递给原始调用,而第一个LoadManager {{1} } 方法。我假设这导致第一个加载器返回错误的管理器的结果。