【发布时间】:2015-03-17 17:28:18
【问题描述】:
我正在尝试使用 androids 电话内容提供商进行一个小型实验,所以我在我的主要活动中编写了这段代码,以按 _id 降序排列 40 行 然后使用最后一行 id 在另一个具有 _id 的游标中再获取 20 行
Uri uri = Uri.parse("content://mms-sms/conversations");
Cursor cursor = getContentResolver().query(uri, new String[]{"_id", "ct_t"}, null, null,
"_id desc limit 40");
Log.d(TAG, "cursor: " + String.valueOf(cursor.getCount()));
cursor.moveToLast();
String lastId = String.valueOf(cursor.getInt(0));
Log.d(TAG, "Last cursor id: " + lastId);
cursor.close();
Cursor cursor2 = getContentResolver().query(uri, new String[]{"_id", "ct_t"}, "_id < ?", new String[] {lastId},
"_id desc limit 20");
Log.d(TAG, "cursor2: " + String.valueOf(cursor2.getCount()));
cursor2.moveToLast();
lastId = String.valueOf(cursor2.getInt(0));
Log.d(TAG, "Last cursor2 id: " + lastId);
cursor2.close();
这会导致 cursor2 返回 0 行,并在尝试读取其第 0 列 (IndexOutOfBounds) 时崩溃,但有趣的是通过替换
Cursor cursor2 = getContentResolver().query(uri, new String[]{"_id", "ct_t"}, "_id < ?", new String[] {lastId},
"_id desc limit 20");
与
Cursor cursor2 = getContentResolver().query(uri, new String[]{"_id", "ct_t"}, "_id < 653", null,
"_id desc limit 20");
其中 653 存储在 lastId 中,我得到一个计数为 20 的有效游标
谁能帮我找出问题所在?
【问题讨论】:
标签: android sqlite android-contentresolver