对网络任务使用AsyncTaskLoader和CursorAdapter



我刚刚深入了解Loader API,并使用CursorLoaderAsyncTaskLoader来填充和管理ListViews。我的数据来自一个JSON API端点,所以我使用Reform来执行网络任务,目前使用AsyncTask

AsyncTaskLoader中重新实现这一点并使用SimpleCursorAdapter是否有意义?因为现在这没有意义,我没有Cursor,因为我的数据没有ContentProvider支持,例如访问数据库或类似的情况。

我应该只使用AsyncTaskArrayAdapter,还是有办法使用新的API?

使用AsyncTaskLoader是个好主意。您可能不必使用SimpleCursorAdapter,而是使用默认的ArrayAdapter或构建适合您需要的自定义适配器。不需要游标,因为您的数据没有由ContentProvider支持。

通过实现自定义数组适配器,您还可以在ListViews 中实现自定义过滤器

使用Reform,您不必担心AsyncTasks和Loaders-Reform已经支持开箱即用的异步执行。您可以使用回调作为最后一个参数来声明Reform的方法。

@GET("/user/{id}/photo")
void getUserPhoto(@Path("id") int id, Callback<Photo> cb);

然后,您所需要做的就是使用接收到的列表创建Adapter,并将此Adapter设置为您的ListView。

此外,Reform的方法可以生成RxJava Observable。这也是异步操作。你可以在这里阅读更多关于这个主题的内容。

关于适配器的问题,您不需要使用CursorAdapter,因为您的数据源不是SQLite数据库或ContentProvider

最新更新