有没有办法限制游标的返回行数?我有一部有大约 4000 个联系人的电话,我只需要其中一些。
这是我正在使用的代码
db = new dBHelper(this);
ContentResolver cr = getContentResolver();
Cursor cursor;
cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " ASC");
Log.i(TAG, CLASSNAME + " got contacts entries");
for (int it = 0; it <100 ; it++){//cursor.getCount()
Log.i(TAG, CLASSNAME + " getting string");
String mytimes_contacted = cursor.getString(cursor.getColumnIndex(dBHelper.times_contacted));
Log.i(TAG, CLASSNAME + " done from the string");
}
我得到的日志是
I/Check(11506): [ContactsPicker] got contacts entries
I/Check(11506): [ContactsPicker] getting first string
D/AndroidRuntime(11506): Shutting down VM
W/dalvikvm(11506): threadid=1: thread exiting with uncaught exception (group=0x2aac8578)
D/dalvikvm(11541): GC_CONCURRENT freed 923K, 46% free 4000K/7303K, external 1685K/2133K, paused 1ms+8ms
E/AndroidRuntime(11506): FATAL EXCEPTION: main
E/AndroidRuntime(11506): java.lang.RuntimeException: Unable to start activity ComponentInfo{~~my package name~~}: android.database.CursorIndexOutOfBoundsException: Index -1 requested, with a size of 3537
要限制游标中的结果数,请尝试:
cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, ContactName + " LIMIT 100");
while(cursor.moveToNext()) {
// something clever
}
谢谢山姆,我完全忘记了移动光标,即使在循环内,多么愚蠢!我会尝试你的建议,然后回到你身边
更新了一个限制示例,但仅限于前 100 个结果。真正的问题是如何你想限制光标?只有名为“鲍勃”的人?
嗯,这个错误实际上是在移动光标,但是我现在学会了如何限制光标是一件好事。问题是,如何限制游标大小,以便即使数据库的行数超过我指定的行数,我也可以获得有限的行数...
请注意,这不适用于所有
ContentProvider
s。它假定一个特定的实现(SQLite)并假定它只ContentProvider
会将值传递给 SQLite。情况不会一直如此。我们有一个 LG-G3 设备,其实现
ContentProvider
方式不支持此处建议的限制子句,并以如下方式结束查询:ORDER BY LIMIT 50