【问题标题】:SQLite database and CursorLoadersSQLite 数据库和 CursorLoaders
【发布时间】:2014-02-17 21:27:51
【问题描述】:

我正在开发一个客户端 android 应用程序,该应用程序将从 URL 检索数据并将其保存在本地数据库中。我熟悉使用SQLiteDatabase 进行此操作。

当我阅读SimpleCursorAdapter 以在列表中显示表格的行时,我开始担心。那是我读到CursorLoader 异步管理游标的时候。

问题是,当阅读它时,他们谈论的是ContentProvider,据我所知,该类用于在应用程序之间共享数据,所以我非常困惑。

你能指导我完成这个吗,我不知道我是否需要使用CursorLoader,因为我不知道它的用途,以及它与ContentProvider 和共享数据有什么关系应用之间。

编辑:阅读此处https://github.com/commonsguy/cwac-loaderex/blob/master/demo/src/com/commonsware/cwac/loaderex/demo/ConstantsBrowser.java中的演示应用程序

似乎在第 122 行检索数据:onCreateLoader

public Loader<Cursor> onCreateLoader(int loaderId, Bundle args) {
    loader = new SQLiteCursorLoader(this, db, "SELECT _ID, title, value "
        + "FROM constants ORDER BY title", null);

    return(loader);
}

这是否意味着我不能再使用 SQLiteDatabase#query() 方法?比如 db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy);

【问题讨论】:

  • 你解决了这个问题吗?

标签: android sqlite android-contentprovider android-cursorloader


【解决方案1】:

ContentProvider 最初设计用于跨应用共享数据,但它们为访问 SQLite 数据库提供了巨大优势(简单的 API、ContentResolver 和 SyncAdapter 集成等)。

本次演讲将帮助您了解使用 ContentProvider 实现您想要的功能的优势:

http://www.youtube.com/watch?v=xHXn3Kg2IQE

您可能知道,您不应该在 UI 线程上执行数据库查询(以及一般的 I/O 操作)。因此,CursorLoader 可以在后台线程中为您访问数据库并在 UI 线程上传递结果 Cursor。 CursorLoader 使用 ContentResolver 接口访问您的 ContentProvider 实现,该实现将执行您的查询并返回 Cursor。

【讨论】:

  • 但是使用 ContentProvider 可以替代使用 SQLite 数据库之类的吗?
  • 不!这只是一个简单的 CRUD 操作接口。您必须实现自己的 ContentProvider 来直接访问您的数据库。
  • 其实,我刚看了developer.android.com/guide/topics/providers/…,我似乎根本不需要内容提供者,我应该使用它吗?如果是,为什么?
  • 它可能会为您提供一些优势(观看视频)。如果你不想使用它,你可以使用 Commonsware 的 SQLiteCursorLoader:github.com/commonsguy/cwac-loaderex/blob/master/src/com/…
  • ContentProvider/ContentResolver 方法也有利于观察者模式的实现。您的活动可以了解数据更改。这些好处在视频中都有展示,真的很值得一看! :D
猜你喜欢
  • 2012-05-25
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2017-03-22
  • 2013-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多