Android数据库访问(简单而高效)

Android数据库访问(简单而高效),android,Android,我目前正在玩android API。目前我正在做一些GUI数据库绑定,我开始有点恼火了 我有一个简单的ListActivity,其中包含列表项的自定义布局。现在我想将底层的ListView绑定到数据库中的一个表。每当我对数据库进行更改时,我都希望能够通知ListView刷新自身并更新GUI。首先,问题看起来很简单:只需添加一个SimpleCursorAdapter,向其传递一个用于获取数据的光标,将列绑定到布局ID和下拉列表。无论何时,只要在ListView上调用notifyDataSetCha

我目前正在玩android API。目前我正在做一些GUI数据库绑定,我开始有点恼火了

我有一个简单的
ListActivity
,其中包含列表项的自定义布局。现在我想将底层的
ListView
绑定到数据库中的一个表。每当我对数据库进行更改时,我都希望能够通知ListView刷新自身并更新GUI。首先,问题看起来很简单:只需添加一个
SimpleCursorAdapter
,向其传递一个用于获取数据的光标,将列绑定到布局ID和下拉列表。无论何时,只要在ListView上调用
notifyDataSetChanged()
,就可以进行刷新,对吗?不

事实证明,这种方式将在UI线程中查询数据库,这显然是一件坏事,因为它会降低性能,并可能导致“应用程序无响应”错误

目前,看起来唯一的方法是使用加载器和内容提供者。这可能是处理数据访问的最抽象和最干净的方法,但它也添加了大量代码(尤其是在ContentProvider本身中,您必须执行大量丑陋的if-else切换大小写处理来“解析”请求)

所以我的问题是:什么是最先进的(和向后兼容的API级别) …但它也添加了大量代码(特别是在 ContentProvider本身,你必须做很多丑陋的事情 切换案例处理以“解析”请求)

我不明白为什么会发生这种情况。在
SimpleCursorAdapter
中为
ContentProvider
实现
Loader
所需的代码是在
onCreateLoader
中实例化
CursorLoader
并交换
LoaderManager.Loade的其他两个回调中返回的
Cursor
rCallbacks
接口。在提供程序中,您只需在
光标上使用
设置通知URI

我真的必须使用ContentProvider吗


如果您想从修改数据库后重新设计数据的
CursorLoader
中获益,可以。您可以自己处理问题,自己进行查询。

优化数据库,使查询速度更快。或者,使用asynctask进行查询并替换光标(或适配器)。