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