android - SQLite 数据库和 CursorLoaders

标签 android sqlite android-contentprovider android-cursorloader

我正在开发一个客户端 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);

最佳答案

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

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

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

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

关于android - SQLite 数据库和 CursorLoaders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21839594/

相关文章:

java - 如何以编程方式关闭 4G/数据?

c# - 多线程应用程序中的 SQLite "Database is locked"错误

ruby-on-rails - sqlite3 数据库中的日期在 Rails 中返回为 nil

android - 使用 FileProvider 从内部存储共享图像

android - RESTful Android ContentProvider URI

java.lang.RuntimeException : Unable to instantiate activity 错误

Android Room `Insert` - 如何通过比较对象字符串来验证我不会输入相同的对象?

android - 在以编程方式将新联系人插入到 android 中的手机时获取 ContactId

android:inputType ="textEmailAddress"- '@' 键和一个 '.com' 键?

JavaScript SQLite 事务回滚