增删查改操作
通过getContentResolver()得到ContentResolver
后,我们就可以通过该对象的delete,insert,updata,query等方法间接操作联系人数据库,那么,如果我们删除某些联系人,以ContactsContract.RawContacts.CONTENT_URI为例,怎么做,先来看下源码:
首先,ContentResolver调用delete();删除操作从红色部分开始
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
waitForAccess();
return super.delete(uri, selection, selectionArgs);
}
上面的super.delete(uri, selection, selectionArgs)调用父亲方法
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
int count = 0;
boolean applyingBatch = applyingBatch();
if (!applyingBatch) {
mDb = mOpenHelper.getWritableDatabase();
mDb.beginTransactionWithListener(this);
try {
count = deleteInTransaction(uri, selection, selectionArgs);
if (count > 0) {
mNotifyChange = true;
}
mDb.setTransactionSuccessful();
} finally {
mDb.endTransaction();
}
onEndTransaction();
} else {
count = deleteInTransaction(uri, selection, selectionArgs);
if (count > 0) {
mNotifyChange = true;
}
}
return count;
}
父类回调deleteInTransaction(uri, selection, selectionArgs);删除联系人操作在这里进行。
//该方法对uri进行匹配来执行相应的删除操作,并且是在事务中完成的,,比如
//content://com.android.contacts/contacts
//content://com.android.contacts/contacts/#
// .......................................................省略
@Override
protected int deleteInTransaction(Uri uri, String selection, String[] selectionArgs) {
.......................................................
.......................................................
//我们可以在uri中的authority部分可带可选的参数ContactsContract.CALLER_IS_SYNCADAPTER
//比如uri字符串可以写成content://com.android.contacts?ContactsContract.CALLER_IS_SYNCADAPTER=true
// ContactsContract.CALLER_IS_SYNCADAPTER默认是false的,他告诉同步适配器如何执行删除操作。
//如果设置为true,则delete的时候直接删除联系人,否则,默认delete时是不会立即删除RawContacts中的数据的,
//只是把RawContacts.DELETED标志位设置为1,从它的aggregate contact中移除该raw contact,即显示联系人时不显示它的内容
//同步联系人时,删除服务器上的raw contact,最终删除手机上已
//标记为DELETED为1的raw contacts
final boolean callerIsSyncAdapter = readBooleanQueryParameter(uri, ContactsContract.CALLER_IS_SYNCADAPTER, false);
final int match = sUriMatcher.match(uri);
switch (match) {
.......................................................
.......................................................
.......................................................
case CONTACTS: {//uri为content://com.android.contacts/contacts,目录(dir)类型
// TODO
return 0;
}
case CONTACTS_ID: {//删除某一个联系人,uri指定了ContactsContract.Contacts中的字段contact_id,Item类型
long contactId = ContentUris.parseId(uri);//得到该给定联系人数据集的id
return deleteContact(contactId);
}
.......................................................
.......................................................
.......................................................
case RAW_CONTACTS: {
int numDeletes = 0;
Cursor c = mDb.query(Tables.RAW_CONTACTS, new String[]{RawContacts._ID},
appendAccountToSelection(uri, selection), selectionArgs, null, null, null);
try {
while (c.moveToNext()) {
final long rawContactId = c.getLong(0);
numDeletes += deleteRawContact(rawContactId, callerIsSyncAdapter);
}
} finally {
c.close();
}
return numDeletes;
}
case RAW_CONTACTS_ID: {
final long rawContactId = ContentUris.parseId(uri);
return deleteRawContact(rawContactId, callerIsSyncAdapter);
}
case DATA: {
mSyncToNetwork |= !callerIsSyncAdapter;
return deleteData(appendAccountToSelection(uri, selection), selectionArgs,
callerIsSyncAdapter);
}
case DATA_ID:
case PHONES_ID:
case EMAILS_ID:
case POSTALS_ID: {
long dataId = ContentUris.parseId(uri);
mSyncToNetwork |= !callerIsSyncAdapter;
return deleteData(Data._ID + "=" + dataId, null, callerIsSyncAdapter);
}
.......................................................
.......................................................
.......................................................
}
}
public int deleteRawContact(long rawContactId, boolean callerIsSyncAdapter) {
if (callerIsSyncAdapter) {
mDb.delete(Tables.PRESENCE, PresenceColumns.RAW_CONTACT_ID + "=" + rawContactId, null);
//直接删除数据
return mDb.delete(Tables.RAW_CONTACTS, RawContacts._ID + "=" + rawContactId, null);
} else {
//从他关联的aggregate contact移除该数据
mDbHelper.removeContactIfSingleton(rawContactId);
//标记为已删除,但不是立即删除数据
return markRawContactAsDeleted(rawContactId);
}
}
综上,我们要删除联系人可以这样做:
1)删除单个联系人:
CR.delete(ContactsContract.RawContacts.CONTENT_URI,ContactsContract.RawContacts_id + "=" + delRawId);
2)删除全部联系人:
getContentResolver().delete(Uri.parse(ContactsContract.RawContacts.CONTENT_URI.toString() +"?" + ContactsContract.CALLER_IS_SYNCADAPTER+"=true"), ContactsContract.RawContacts._ID + ">0", null));
数据索引从1开始,所以只要id>0就可以全部删除raw contact记录,上面的删除操作是立即进行的,因为我们设置了true.
- 大小: 23.1 KB
- 大小: 26.3 KB
- 大小: 20.6 KB
分享到:
相关推荐
《商会通讯录》《企业通讯录》是一款人人可加入的线上互联网通讯录,源码下载网址http://address-book.cn 该通讯录用户可直接通过手机或PC浏览器进行访问和查看!它具有简便易用、高效安全等特点,适合个人、团体、...
android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android 实现仿微信通讯录android ...
通讯录,企业通讯录,个人通讯录,VS2013+SQL2008, 自己解密dll后,重新整理的项目。 登录的账号 admin,密码:000000,在config文件里进行修改!!! default.aspx 首页,不需要登录,登录以后可以管理通讯录 ...
小程序源码 通讯录 (代码源)小程序源码 通讯录 (代码源)小程序源码 通讯录 (代码源)小程序源码 通讯录 (代码源)小程序源码 通讯录 (代码源)小程序源码 通讯录 (代码源)小程序源码 通讯录 (代码源)小程序源码 通讯录 ...
1. 管理员登录:实现管理员的登录,可查询、添加、修改、删除通讯录信息。 2. 好友登录:实现好友的登录,只可查询通讯录信息。 三、 信息查询模块 1. 按照姓名查询:按照姓名查询个人信息 2. 按照籍贯查询:...
【通讯录管理系统】是一个经典的信息管理项目,它利用面向对象编程技术来实现,主要目标是帮助用户方便地存储、检索和管理联系人的信息。在C++编程语言中,面向对象编程(Object-Oriented Programming,OOP)是其...
在C#编程中,创建一个通讯录应用是一个常见的任务,涉及到数据存储、用户界面设计以及数据操作等多个方面。以下是对这个主题的详细说明: 一、C#基础 C#是微软开发的一种面向对象的编程语言,它被广泛用于构建...
PHP实现的通讯录管理系统设计文档+源代码+SQL文件PHP实现的通讯录管理系统设计文档+源代码+SQL文件PHP实现的通讯录管理系统设计文档+源代码+SQL文件PHP实现的通讯录管理系统设计文档+源代码+SQL文件PHP实现的通讯录...
《公司通讯录与同事通讯录管理系统详解》 在现代企业中,有效的信息沟通是提高工作效率、促进团队协作的关键。一个完善的公司通讯录系统能够帮助企业快速定位到所需联系人,节省时间,提高工作效能。本文将深入探讨...
本项目主要利用C++来实现一个通讯录管理系统,系统中需要实现的功能如下: 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录100人 显示联系人:显示通讯录中所有联系人...
《C#源码实现的通讯录系统解析》 在信息技术领域,C#作为一种高效且功能强大的编程语言,常被用于开发各种类型的应用程序,其中包括个人和企业级的通讯录系统。本文将深入探讨一个基于C#编写的源码通讯录系统,通过...
《汇编语言设计通讯录》是一项技术性强、实践性高的编程任务,旨在通过汇编语言实现一个基础的通讯录系统,具备插入、列表显示、添加和删除联系人等基本功能。汇编语言作为计算机硬件与软件之间的桥梁,是低级编程的...
【标题】:“通讯录(基于weui开发的)” 在这个项目中,“通讯录”是一个采用weui框架开发的用户界面,主要用于展示和管理联系人信息。weui是中国微信团队设计的一套面向移动设备的轻量级UI框架,它提供了一系列...
【标题】:“具有个性的通讯录” 在当今数字化时代,通讯录不再仅仅是传统的纸质记录,而是演变成了一种个性化、智能化的服务。一个“具有个性的通讯录”意味着它不仅仅是一个存储联系人信息的工具,而是一个能够...
2021社群通讯录——圈子拓展助手 社群通讯录是一款发起联盟合作的通讯录应用。通过发起通讯录,可以帮您梳理圈子的电话、职业,供需信息等形成联盟。帮助行业圈子或微信群友认识彼此,深化关系,加强合作。 简单和微信...
在Android平台上,获取手机通讯录信息是常见的功能需求,尤其对于开发社交类或者管理类应用来说,这是一项基本操作。本`Android获取手机通讯录信息demo`提供了简单易用的方法来实现这一功能。下面我们将详细探讨相关...
在IT领域,通讯录是一个常见的应用,它涉及到数据结构、算法和编程技术。在这个主题下,我们将深入探讨如何实现一个简单的通讯录系统,适合初学者理解数据结构的应用。 首先,我们要明白通讯录的核心功能:存储联系...