【发布时间】:2010-12-20 07:54:59
【问题描述】:
我有一个 Android 应用程序,其中包含一个名为“myTestDB”的数据库和一个名为“list_items”的表。我想使用 Cursor getContentResolver().query() 方法获取要添加到 SimpleCursorAdapter 的游标。 query() 方法的第一个参数是一个 URI,我不确定 URI 应该是什么样子。
【问题讨论】:
我有一个 Android 应用程序,其中包含一个名为“myTestDB”的数据库和一个名为“list_items”的表。我想使用 Cursor getContentResolver().query() 方法获取要添加到 SimpleCursorAdapter 的游标。 query() 方法的第一个参数是一个 URI,我不确定 URI 应该是什么样子。
【问题讨论】:
您不使用getContentResolver() 直接访问 SQLite 数据库。与内容提供商合作时,您使用getContentResolver()。您在 SQLiteDatabase 对象上调用 query() 以获取与 SimpleCursorAdapter 一起使用的 Cursor。
【讨论】:
CursorLoader 有Uri 呢?
Loader 框架在 2010 年不存在。此外,CursorLoader 也不直接访问 SQLiteDatabase,而是做我的答案描述:使用ContentResolver 通过Uri 查询ContentProvider。
数据库没有 Uri(除了它所在的文件)。通过内容提供商管理的数据有一个。如果要使用内容解析器进行查询,则需要先编写一个内容提供者。
如果您不想这样做,只需使用 SQLiteDatabase 的 query 函数 - 它会返回一个光标,您可以将其传递给 SimpleCursorAdapter。
【讨论】:
相当简单的方法调用看起来像这样
mDataBase.query(TABLE_NAME, columns, null, null, null, null, null);
其中,TABLE_NAME = 您的 SQLite 表名和列是一个字符串数组,如
String columns[] = new String[] { "Column1" };
如果你想要所有列,你可以传递null 作为第二个参数。
更正:正如其他一些人所提到的,没有 URI。
【讨论】:
URI。看看 CommonsWare 和 EboMike 是怎么说的。