【发布时间】:2012-06-07 23:41:56
【问题描述】:
为什么我的 Android 光标没有一直走到原来“承诺”的末尾??
我的 cursor.getCount() 与我上次的 cursor.getPosition() 不同。检查我的while循环!这就是我所做的一切!
注意事项: 1.关于查询联系人内容提供者(android api>5) 2.我只显示基本代码
Cursor cursor = mContext.getContentResolver().query(mUri, mProjections, null, null, null);
Logger.d(TAG, "*** cursor.getCount(): "+cursor.getCount());
while (cursor.moveToNext()) {
Logger.d(TAG, "| position: "+cursor.getPosition());
processMainCursor(serializer, cursor);
}
cursor.close();
processMainCursor() 将显示来自光标的数据 + 执行另一个查询:一个 4 个电话、一个 4 个电子邮件、一个 4 个 IM 帐户:
void processMainCursor(XmlSerializer serializer, Cursor main_cursor) {
writeCursorData(serializer, main_cursor); //writes cursor data, column by column
writePhoneEntities(serializer, main_cursor);
writeEmailEntities(serializer, main_cursor);
writeIMEntities(serializer, main_cursor);
}
在我的writeXXX 方法中,我都没有关闭我的main_cursor 或移动下一步!!!..必须相信我.. 我只是做一个新查询,打印数据并关闭该光标
所以统计:
- cursor.getCount() = 695 (总是)
- 评论 writePhoneEntities、writeEmailEntities、writeIMEntities:cursor.getCount() = last cursor.getPosition() = 695(太正确了!)
- 留下一个/两个/所有我的 writeXEntities 显示随机性;示例:将它们全部保留: last cursor.getPosition() 有时会显示 254、257、253 等;只留下电话和 IM:514、510、511 等(如此不同的 RUN -> 不同的 last cursor.getPosition() VALUE)
所以意见.. 为什么会这样?和内存有关吗?
更新: 将我的任何 writeXEntities 显示在 logcat 的末尾: 删除死的内容提供者:联系人
更新 2
添加cursor.moveToFirst(); & 像循环一样
do {
//do whatever you want
} while (cursor.moveToNext());
没有完成任务..
所以也许答案就在这个 logcat 条目中:
05-21 23:29:30.209: I/ActivityThread(7085): Removing dead content provider: contacts
05-21 23:29:30.209: I/ActivityThread(7085): Removing dead content provider: com.android.contacts
writeXEntity 的示例已删除
解决方案 ..我没有正确关闭 writeXEntity 的游标(可能在 main while 之后留下相当多的打开游标)
实际上我是这样关闭的
if(phone_cursor!=null && phone_cursor.getCount() > 0)
{
//... stuff
phone_cursor.close();
}
我应该在 if 之后关闭
if(phone_cursor!=null && phone_cursor.getCount() > 0)
{
//... stuff
}
phone_cursor.close();
我猜要让一个 basilion 光标打开 ..是答案吗?!?
【问题讨论】:
-
请发布您的一个(或全部)
write功能,您发布的内容应该可以正常工作。 -
您应该将您的解决方案作为答案发布然后接受它,这样每个人都会知道找到了解决方案(无需打开帖子并阅读它)。
标签: android android-contacts android-cursor