使用AsyncTaskLoader和CursorAdapter进行网络任务?

时间:2015-02-15 16:10:34

标签: java android android-asynctask android-cursoradapter android-loadermanager

我刚刚进入Loader API并使用CursorLoaderAsyncTaskLoader来填充和管理ListViews。我的数据来自JSON API端点,因此我使用Retrofit执行网络任务,目前正在使用AsyncTask

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

我应该坚持AsyncTaskArrayAdapter还是有办法使用新的API?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

然后您需要做的就是使用收到的列表创建适配器并将此适配器设置为ListView。

此外,Retrofit的方法可以生成RxJava Observable。这也是异步操作。您可以阅读有关此主题的更多信息here

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