Android的API通过SQLite提供了一个干净的机制来查询联系人列表.但是,我不确定如何限制结果:
Cursor cur = ((Activity)mCtx).managedQuery(
People.CONTENT_URI,
columns,
"LIMIT ? OFFSET ?",
new String[] { Integer.toString(limit), Integer.toString(offset) },
null
);
Run Code Online (Sandbox Code Playgroud)
不行.
dha*_*g23 10
实际上,根据提供程序,您可以为URI附加限制,如下所示:
uri.buildUpon().appendQueryParameter("limit", "40").build()
Run Code Online (Sandbox Code Playgroud)
我知道MediaProvider处理这个问题,从查看最近的代码来看,你似乎也可以通过联系人来处理它.
ContentProvider当您查询 Contacts 时,您访问的是,而不是 SQLite ContentProvider。该ContentProvider接口不LIMIT直接支持子句。
如果您直接访问自己的 SQLite 数据库,请使用rawQuery()on 方法SQLiteDatabase并添加LIMIT子句。
我从这个bug中发现Android使用以下正则表达式来解析LIMIT查询的子句:
从 <framework/base/core/java/android/database/sqlite/SQLiteQueryBuilder.java>
使用以下sLimitPattern检查LIMIT子句.
private static final Pattern sLimitPattern = Pattern.compile("\\s*\\d+\\s*(,\\s*\\d+\\s*)?");
Run Code Online (Sandbox Code Playgroud)
请注意,正则表达式确实接受该格式,offsetNumber,limitNumber即使它不OFFSET直接接受该语句.
我认为你必须手动执行此操作。从 ManagedQuery 调用返回的 Cursor 对象不会立即执行完整查询。您必须使用 Cursor.move*() 方法在结果集中跳转。
如果您想限制它,请在循环结果时创建您自己的限制。如果您需要分页,那么您可以使用 Cursor.moveToPosition(startIndex) 并从那里开始阅读。
| 归档时间: |
|
| 查看次数: |
7350 次 |
| 最近记录: |