android loader中的数据库操作

时间:2015-04-06 20:14:14

标签: android database sqlite loader

我正在使用LoaderManager,onCreateLoader方法会创建一个新的CursorLoader。

    @Override
    public Loader<Cursor> onCreateLoader(int id, Bundle data) {
return new CursorLoader(context, CONTENT_URI, PROJECTION,
                null, null, null);
}

只有在onLoadFinished()中加载完成后,UI才会更新。 每次加载cusor时,我还需要进行一些数据库操作,比如构建一个新的排序索引。这不能异步完成,因为UI依赖于此。

有没有办法在加载器中进行这样的db操作?或者这个问题的最佳设计是什么?

2 个答案:

答案 0 :(得分:0)

根据您的问题,您使用加载程序和内容提供程序从数据库加载数据

你也正在研究排序类型的东西,它可以改变数据库中项目的顺序......

所以,根据我在这种类型的应用程序中的经验建议的最佳方式在UI中执行此索引排序操作只有util用户离开屏幕...

所以,在你的片段覆盖 onStop 方法的活动中,根据排序优先级或数字更新数据库中的数据索引......

将数据更新到内容提供者后,只需通知URI进行更改..

希望我的观点对你很清楚..

答案 1 :(得分:0)

装载机专为优化数据库访问而设计。该操作不关心更新UI,因此不关心提供进度信息。虽然可以(并且我使用它松散),要从加载器更新UI,您应该避免这种情况,因为Loader是这项工作的错误工具。强制加载器提供进度信息将打破范式。只有在完成整个操作后,Loader才会返回。相反,如果要在执行查询时更新UI,则应使用AsyncTask。

如果您必须使用Loader,那么您可以在Update progressbar from AsyncTaskLoader?找到解决方法。但同样,从您的问题来看,看起来您对替代方案持开放态度,如果您需要更新,则使用AsyncTask,或者您可以坚持使用Java线程。