Android数据库访问(简单和高性能)

时间:2012-12-10 10:30:57

标签: android

我正在玩Android API。目前我正在做一些GUI数据库绑定,我开始有点生气了。

我有一个简单的ListActivity,其中包含列表项的自定义布局。现在我想将基础ListView绑定到数据库中的表。每当我对数据库进行更改时,我希望能够通知ListView刷新自己并更新GUI。首先,问题看起来很简单:只需添加一个SimpleCursorAdapter,传递一个光标来获取数据,将列绑定到布局ID和你的下来。每当你想要刷新时,只需在ListView上调用notifyDataSetChanged()即可完成,对吧?不!

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

目前,看起来唯一的方法是使用Loaders和ContentProviders。这可能是处理数据访问的最抽象和最干净的方法,但它也增加了大量代码(特别是在ContentProvider本身,你必须做很多丑陋的if-else switch-case处理来“解析”请求)。

所以我的问题是:将数据库表连接到ListView(或任何其他UI组件)的最新技术(向后兼容API级别< 11)是什么?我真的必须使用ContentProvider吗?

为什么这么复杂?即:扫描蓝牙设备可以在大约20行代码中实现,但是对于(从我的角度来看)更常见的事情,例如data-ui-connection,你必须实现至少两个类,每个100 + loc。这很疯狂!

1 个答案:

答案 0 :(得分:0)

  

...但它也增加了大量的代码(特别是在   ContentProvider本身你必须做很多丑陋的if-else   用于“解析”请求的switch-case处理。)

我不明白为什么会这样。在Loaders中为SimpleCursorAdapter实施ContentProvider所需的代码是在CursorLoader中实例化onCreateLoader并在其中交换返回的Cursor LoaderManager.LoaderCallbacks接口的其他两个回调。在提供商中,您只需使用setNotificationUri上的Cursor

  

我真的必须使用ContentProvider吗?

如果您希望在修改数据库后从CursorLoader更新数据中受益,是的。你总是可以自己动手并自己做查询。