gpt4 book ai didi

Android Cursor - moveToNext() 似乎没有到达光标的末尾

转载 作者:太空狗 更新时间:2023-10-29 15:48:12 26 4
gpt4 key购买 nike

为什么我的 Android Cursor 没有一直走到原来“promise”的末尾??

我的 cursor.getCount() 与我上一个 cursor.getPosition() 不同。检查我的 while 循环!这就是我所做的一切!

注释:1. 查询Contacts content provider (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 -> 不同的最后一个 cursor.getPosition() VALUE)

所以意见..这是为什么呢?与内存有关吗?

更新:在 logcat 的末尾保留我的任何 writeXEntities 显示:删除死内容提供者:联系人

更新 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 游标保持打开状态..就是答案吗?!?

最佳答案

您需要将光标移动到第一行。尝试在 while 循环之前添加 cur.moveToFirst()

您还可以考虑使用 do-while 循环。这将确保您永远不会跳过光标中的第一行:

if (cursor.moveToFirst()) {
do {
//do whatever you want
} while (cursor.moveToNext());
}
cursor.close();

关于Android Cursor - moveToNext() 似乎没有到达光标的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10872178/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com