今天下午需要实现一个东西是:获取出系统联系人数据库中的raw_contact_id,使用系统提供的ContentResolver进行查询,但是一直报错,后来google了一下,发现原来在这里面是无法使用distinct的。不知道为什么。也不知道那些贴代码出来的人是怎么办到的。后来参考了一篇博文,问题算是得到解决了
Cursor cursor2 = context.getContentResolver().query(
Data.CONTENT_URI,
new String[]{ Data.RAW_CONTACT_ID },
" 1=1 ",
null,
null);
先查出所有的raw_contact_id
再利用HashSet的特性,因为向HashSet中添加记录的时候,默认会将相同的去除
这样就相当于distinct的效果啦。
HashSet<Integer> hashSet = new HashSet<Integer>();
while(cursor2.moveToNext())
{
hashSet.add(cursor2.getInt(cursor2.getColumnIndex(Data.RAW_CONTACT_ID)));
}
System.out.println("hashSet:count:" + hashSet.size());
参考链接:http://www.oschina.net/question/163910_27486
但是这样做还是有问题,因为HashSet的访问需要使用迭代器,而我不希望所得到的数据通过迭代器来处理,因此,还可以这样处理:
while(cursorOfSys.moveToNext())
{
int currRawContactId = cursorOfSys.getInt(cursorOfSys.getColumnIndex(Data.RAW_CONTACT_ID));
if(listOfSysRaw.isEmpty())
{
listOfSysRaw.add(currRawContactId);
}
else
{
int sizeOfSysRaw = listOfSysRaw.size();
System.out.println("currRawContactId:" + currRawContactId + "sizeOfSysRaw:" + sizeOfSysRaw);
boolean isExist =false;
for(int i = 0; i < sizeOfSysRaw; i++)
{
if(listOfSysRaw.get(i) == currRawContactId)//如果不存在这个值
{
isExist = true;
break;
}
}
if(!isExist)
{
listOfSysRaw.add(currRawContactId);//添加到数组里面
}
}
}
分享到:
相关推荐
在Android开发中,ContentResolver是Android系统提供的一种接口,它为应用程序提供了与ContentProvider进行交互的能力。ContentProvider作为Android四大组件之一(Activity、Service、BroadcastReceiver、...
ContentResolver是Android框架提供的一个接口,它为应用程序提供了一个统一的接口,用来与ContentProvider进行交互。开发者可以通过ContentResolver查询、插入、更新或删除ContentProvider中的数据,而无需了解具体...
开发者通过ContentProvider暴露数据,而其他应用则通过ContentResolver进行访问,这种方式不仅提高了代码的可复用性,也促进了Android生态系统的互操作性。在进行跨应用数据交互时,理解并熟练掌握这两者至关重要。
在Android开发中,`ContentResolver` 是一个非常重要的组件,它负责与系统的内容提供者(Content Provider)进行交互,从而获取或修改系统中的数据。在这个"ContentResolver_Contacts_Demo"示例中,我们将深入探讨...
ContentResolver是Android系统中用于在应用程序之间进行数据交互的重要工具,它提供了统一的接口,使得应用程序可以方便地访问和操作其他应用或系统服务提供的数据,如联系人、日历、多媒体文件等。在这个实验中,...
设计App通过ContentResolver的使用场景,访问系统中所有联系人并将其以列表形式展示出来,长按联系人姓名会弹出菜单显示添加、删除、排号等相关操作,选择菜单执行相关操作,如选择删除将删除选中的联系人,选择拔号...
ContentProvider和ContentResolver永远是相对的,本章主要是讲ContentResolver的使用,当然是在android系统提供ContentProvider的情况下。 ContentProvider与ContentResolver概念上的东西的就不讲了,主要讲一下...
ContentResolver提供了标准化的API,允许开发者无需关心数据的具体存储方式,无论是数据库、文件系统还是网络,只要ContentProvider实现了相应的接口,就可以通过ContentResolver进行操作。 首先,了解URI(Uniform...
ContentProvider是Android中用于数据共享和跨应用数据访问的机制,而ContentResolver则是应用程序与ContentProvider进行交互的接口。下面我们将深入探讨如何利用这两个组件来获取手机中的联系人信息。 首先,理解...
本篇文章将详细讲解如何使用ContentProvider通过ContentResolver来获取系统的图片、视频和音频资源。 一、ContentProvider基础 ContentProvider是Android提供的一种统一的数据访问接口,它封装了对数据的操作,包括...
在安卓开发中,ContentResolver是Android系统提供的一种接口,用于与内容提供者(Content Provider)进行交互,从而访问和管理应用程序的数据,如联系人、日历等。本项目"安卓ContentResolver操作通讯录demo"是一个...
在Android系统中,ContentProvider和ContentResolver是两个关键组件,它们为应用程序间的共享数据提供了统一的接口。在Android开发中,如果我们需要对数据库进行增、删、改、查(CRUD)操作,这两个组件就显得尤为...
在Android系统中,应用程序之间进行数据共享是一种常见的需求。为了实现这一目标,Android提供了一种安全、标准化的方式,即通过ContentProvider和ContentResolver组件。本文将深入探讨这两个组件的工作原理及其在...
2. **ContentResolver**:ContentResolver是Android系统中的一个接口,它允许应用程序与其他应用程序的数据进行交互,尤其是与ContentProvider相关的数据。例如,读取和写入联系人、媒体文件等。通过URI(统一资源...
ContentResolver 是 Android 中一个非常重要的组件,它提供了一个统一的接口来访问和操作共享数据。 在 Android 中,应用程序之间数据共享可以通过 ContentProvider 来实现。ContentProvider 是一个抽象接口,它...
接下来,调用系统联系人数据通常涉及到使用系统的ContactsContract类,这是Android提供的一个接口,用于与系统联系人数据进行交互。调用步骤如下: 1. 获取ContentResolver:在Activity或Service中,通过`...
在Android开发中,ContentProvider和ContentResolver是两个关键组件,它们构成了Android系统中不同应用程序间数据共享的基础。本文将深入探讨如何自定义ContentProvider和如何有效地使用ContentResolver进行数据操作...
1. **ContentResolver 概念**:`ContentResolver` 是 Android 系统提供的一个接口,它允许应用通过统一的方式与各种数据源(如 SQLite 数据库、文件系统、网络资源等)进行通信,无需关心底层实现细节。 2. **...
ContentProvider与ContentResolver 与 SQLiteOpenHelper http://blog.csdn.net/i_do_can/article/details/50937380 http://blog.csdn.net/i_do_can/article/details/50937380