pul*_*988 2 android android-contacts android-cursor
为什么我的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();
Run Code Online (Sandbox Code Playgroud)
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);
}
Run Code Online (Sandbox Code Playgroud)
在我的writeXXX方法中没有一个我关闭我的main_cursor或移动下一个!!! ..必须相信我...我只是做一个新的查询,打印数据并关闭该光标
所以统计:
所以oppinions ..为什么?与记忆有关吗?
更新:将我的writeXEntities中的任何一个显示在logcat的末尾: 删除死内容提供者:联系人
更新2
添加 cursor.moveToFirst();和执行循环
do {
//do whatever you want
} while (cursor.moveToNext());
Run Code Online (Sandbox Code Playgroud)
不做这个工作..
所以答案可能就是这个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
Run Code Online (Sandbox Code Playgroud)
删除writeXEntity的示例
解决方案 ..我wasnt从writeXEntity关闭游标corectly(可能留下相当多打开的游标的主要过了一会儿)
实际上我是这样关闭的
if(phone_cursor!=null && phone_cursor.getCount() > 0)
{
//... stuff
phone_cursor.close();
}
Run Code Online (Sandbox Code Playgroud)
我应该在if之后关闭
if(phone_cursor!=null && phone_cursor.getCount() > 0)
{
//... stuff
}
phone_cursor.close();
Run Code Online (Sandbox Code Playgroud)
我想让一个basilion光标打开..答案是什么?!?
您需要将光标移动到第一行.尝试cur.moveToFirst()在while循环之前添加.
您也可以考虑使用do-while循环.这将确保您永远不会跳过游标中的第一行:
if (cursor.moveToFirst()) {
do {
//do whatever you want
} while (cursor.moveToNext());
}
cursor.close();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7005 次 |
| 最近记录: |