android 多个cursor 的读取 和读取某个Cursor其他从集合中获取的速度比较

如代码所示,2的速度明显快好几倍

public void getContact(Context con){
Cursor cursor=con.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
PROJECTION,null,null, QUERY_ORDER_BY_NAME);
if (cursor != null) {
try {
List<UContact> uContacts = new ArrayList<UContact>();
if (cursor.moveToFirst()) {
do {
UContact item = new UContact();
item.setId(cursor.getLong(0));
item.setPhotoId(cursor.getLong(1));
item.setName(cursor.getString(2));
item.setFirstChar(getFirstChar(cursor
.getString(android.os.Build.VERSION.SDK_INT >= 8 ? 3
: 2)));
if (android.os.Build.VERSION.SDK_INT >= 8)
item.setSortKey(cursor.getString(3));
queryUMGroupById(con,item, item.getId());
uContacts.add(item);
} while (cursor.moveToNext());
}
Collections.sort(uContacts, new ArrayCompare());
isContactChange = false;
// mContactCount.put(0, uContacts.size());
} catch (Exception e) {
e.printStackTrace();
} finally {
cursor.close();
cursor = null;
}
}
}

private void queryUMGroupById(Context con,UContact contact, long id) {
int groupId=0;
Cursor cursor=con.getContentResolver().query(ContactsContract.Data.CONTENT_URI, new String[] { CommonDataKinds.GroupMembership.GROUP_ROW_ID }
, Data.CONTACT_ID + " = ? AND " + Data.MIMETYPE + " =?",
new String[] { String.valueOf(id), UM_GROUP_MIMETYPE }, null);

if(cursor!=null){
int count=cursor.getCount();
if(count>0){
cursor.moveToFirst();
groupId=  cursor.getInt(0);
contact.setUmGroupId(groupId);
if(cursor!=null){
cursor.close();
cursor=null;
}

}
}
}

public void getContact2(Context con){
Cursor cursor_group=con.getContentResolver().query(ContactsContract.Data.CONTENT_URI,
new String[] {Data.CONTACT_ID,CommonDataKinds.GroupMembership.GROUP_ROW_ID }
, Data.MIMETYPE + " =?",
new String[] {UM_GROUP_MIMETYPE }, null);

if(cursor_group!=null){
mGroupMap.clear();
int count=cursor_group.getCount();
if(count>0){
cursor_group.moveToFirst();
for(int i=0;i<count;i++){
int contactId=cursor_group.getInt(0);
int groupId=cursor_group.getInt(1);
mGroupMap.put(contactId, groupId);
cursor_group.moveToNext();
}
if(cursor_group!=null){
cursor_group.close();
cursor_group=null;
}
}
}

Cursor cursor=con.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, PROJECTION,null,null, QUERY_ORDER_BY_NAME);
if (cursor != null) {
try {
List<UContact> uContacts = new ArrayList<UContact>();
if (cursor.moveToFirst()) {
do {
UContact item = new UContact();
item.setId(cursor.getLong(0));
item.setPhotoId(cursor.getLong(1));
item.setName(cursor.getString(2));
item.setFirstChar(getFirstChar(cursor
.getString(android.os.Build.VERSION.SDK_INT >= 8 ? 3
: 2)));
if (android.os.Build.VERSION.SDK_INT >= 8)
item.setSortKey(cursor.getString(3));
item.setUmGroupId(mGroupMap.get(item.getId()));
uContacts.add(item);
} while (cursor.moveToNext());
}
Collections.sort(uContacts, new ArrayCompare());
isContactChange = false;
// mContactCount.put(0, uContacts.size());
} catch (Exception e) {
e.printStackTrace();
} finally {
cursor.close();
cursor = null;
}
}
}
时间: 2024-07-30 00:27:33

android 多个cursor 的读取 和读取某个Cursor其他从集合中获取的速度比较的相关文章

nfc技术-Android中使用NFC读取NfcA类型的芯片,Apdu指令怎么获取?

问题描述 Android中使用NFC读取NfcA类型的芯片,Apdu指令怎么获取? Android中使用NFC读取NfcA类型的芯片,Apdu指令怎么获取?就是 byte[] response = mNfc.transceive(cmd);中的这个cmd命令! 解决方案 补充:芯片卡是NFC-A (ISO 14443-3A) TpyeA类型的,得到的Tag是android.nfc.tech.NfcA类型 解决方案二: 解决了吗?今天也遇到同样的问题了.求大神不吝赐教. 解决方案三: 楼上的解决了

jquery读取List集合中的一个元素,但只是获得第一个元素

问题描述 <c:forEachitems="${proComment}"var="proComment"><divclass="rate-item"><div><aclass="J-update-feedbackorder-rated"style="cursor:pointer;"name="commentButton"><spanc

XmlReader 读取器读取内存流 MemoryStream 的注意事项

stream|xml MemoryStream对象提供了无需进行IO就可以创建Stream的方法,XmlTextWriter和XmlReader提供快速书写和读取XML内容的方法,结合MemoryStream,就可以直接在内存中构造XmlTextWriter,并用XmlReader进行读取. 使用MemoryStream和XmlTextWriter进行书写XML,需要注意两点:XmlTextWriter.Flush操作和重设MemoryStream.Position = 0. C# <%@ Pa

代码-使用C语言1. 读取一个.C文件,删除该文件中所有的注释语句

问题描述 使用C语言1. 读取一个.C文件,删除该文件中所有的注释语句 读取一个.C文件,删除该文件中所有的注释语句.然后写入到新的.C文件里. 要求: 删除注释语句功能采用动态链接库形式 在功能实现的基础上: --单元测试要足够充分 --要通过所有的MISRA C的检查 --代码要符合代码规范. 解决方案 #include int main() { FILE *fp,*fp1; char str[99]=""; int i=0; fp=fopen("test.c"

ios sqlite3-ios 中应用sqlite3进行本地读取 每次读取 ios内存增加知道内存不足 崩溃

问题描述 ios 中应用sqlite3进行本地读取 每次读取 ios内存增加知道内存不足 崩溃 sqlite3_stmt *stmt = [[BISQLiteUtil sharedBISQLiteUtil] getSQLiteStatement:(char *)[sql UTF8String]]; 1.这段代码注释内存增加没问题, 2.一释放,读取的数据不做处理,内存也会明显增加,操作几次,知道系统内存不足崩溃退出 3.sqlite3读取数据有什么优化方法吗?有人遇到过这个问题吗?急....

javascript-关于JS读取form表单的问题,form中嵌套table,input标签放入table中

问题描述 关于JS读取form表单的问题,form中嵌套table,input标签放入table中 <html> <head></head> <body> <form id = "form1" name = "form1" action = "b.html" method = "post"> <table id = "tab" name =

在子页面中获取或者设置母板面中的变量,别人的代码我怎么读取不了呀

问题描述 如何在子页面中获取或者设置母板面中的变量.需要先在母板页创建一个公共变量.1publicString_selFeed=string.Empty;2publicstringSelFeed3{4set{this._selFeed=value;}5get{return_selFeed;}6}复制代码子页面访问或者设置母板页的变量只需要使用Master.Page.SelFeed来操作.注意:需要在子页面加上<%@MasterTypeVirtualPath="~/母板.master&quo

C#读取txt内容,并将读取的txt里面的内容写入Excel中?

问题描述 txt内容如下:序号姓名籍贯名次语文英语数学11小明江苏18692952小红四川29088923小刚浙江38586924小李山东4828489 解决方案 解决方案二:然后呢..你是不会读取还是不会分割?还是不会写到xls里啊?还是所有都不会....最起码的你应该丢出来点代码吧.....解决方案三:读文件http://msdn.microsoft.com/zh-cn/library/system.io.streamreader(VS.80).aspxexcel操作http://www.c

XmlReader 读取器读取内存流 MemoryStream 的注意事项_实用技巧

MemoryStream对象提供了无需进行IO就可以创建Stream的方法,XmlTextWriter和XmlReader提供快速书写和读取XML内容的方法,结合MemoryStream,就可以直接在内存中构造XmlTextWriter,并用XmlReader进行读取.  使用MemoryStream和XmlTextWriter进行书写XML,需要注意两点:XmlTextWriter.Flush操作和重设MemoryStream.Position = 0.  C#  <%@ Page Langu