热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Android实现批量添加联系人到通讯录

nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd

由于工作上的需要,把数据库中备份的联系人添加到Android通讯录,一般都有几百条记录,插入一条数据系统默认commit一次,这样效率就降低了,如果把所有的数据都添加进去后再commit效率就不一样,这就需要事务。

Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法 2014-05/101148.htm

Ubuntu 12.04搭建Android开发环境 2012-09/69961.htm

Ubuntu 14.04 配置 Android SDK 开发环境 2014-05/101039.htm

64位Ubuntu 11.10下Android开发环境的搭建(JDK+Eclipse+ADT+Android SDK详细) 2013-06/85303.htm

Ubuntu 12.10 x64 安装 Android SDK 2013-03/82005.htm

没有添加事务的方法,每次添加一条记录

 /**
  * 单条添加数据
  *
  * @param contacts
  * @return
  */
 public boolean add(Tb_contacts contacts) {
  SQLiteDatabase db = helper.getWritableDatabase();
  ContentValues values = new ContentValues();
  values.put("name", contacts.getName());
  values.put("number", contacts.getNumber());
  long result = db.insert("tb_contacts", null, values);
  GlobalConstants.PrintLog_D("[ContactsDAO->add] result = " + result);
  db.close();
  if (result != -1)
   return true;
  else
   return false;
 }

Tb_contacts是实体类

public class Tb_contacts {
 private String name;
 private String number;

 public Tb_contacts() {
  super();
 }

 public Tb_contacts(String name, String number) {
  super();
  this.name = name;
  this.number = number;
 }

 public String getName() {
  return name;
 }

 public void setName(String name) {
  this.name = name;
 }

 public String getNumber() {
  return number;
 }

 public void setNumber(String number) {
  this.number = number;
 }

 @Override
 public String toString() {
  return "Tb_contacts [name=" + name + ", number=" + number + "]";
 }

}

添加二百多条记录要两分多钟
 
看下面这种方法

/**
  * 批量添加数据
  *
  * @param cursor
  * @return
  */
 public boolean add(Cursor cursor) {
  SQLiteDatabase db = helper.getWritableDatabase();
  long result = 0;
  db.beginTransaction();
  while (cursor.moveToNext()) {
   ContentValues values = new ContentValues();
   String cOntactname= cursor.getString(cursor
     .getColumnIndex(Phone.DISPLAY_NAME));
   String cOntactnumber= cursor.getString(cursor
     .getColumnIndex(Phone.NUMBER));
   values.put("name", contactname);
   values.put("number", contactnumber);
   result = db.insert("tb_contacts", null, values);
   GlobalConstants.PrintLog_D("[ContactsDAO->add] cursor result = "
     + result + " number = " + contactnumber);
  }
  db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交
  db.endTransaction();
  cursor.close();
  db.close();
  if (result != -1)
   return true;
  else
   return false;
 }

传入的参数是查询得到的数据

Cursor cOntactsCursor= getActivity().getContentResolver().query(
     Phone.CONTENT_URI, null, null, null, null); // 读取联系人
   contacts.add(contactsCursor);

同样的数据只要十几秒就可以了,关键就这几句话
 
1.db.beginTransaction(); 循环之前开启事务
2.db.setTransactionSuccessful(); 循环结束后调用
3.db.endTransaction();最后释放事务
以上是对一般数据库的操作,对通讯录有专门的ContentProvider批量操作
 
先看一条一条记录操作

 /**
  * 往数据库中新增联系人
  *
  * @param name
  * @param number
  */
 public static void AddContact(String name, String number) {

  ContentValues values = new ContentValues();
  // 首先向RawContacts.CONTENT_URI执行一个空值插入,目的是获取系统返回的rawContactId
  Uri rawCOntactUri= mContext.getContentResolver().insert(
    RawContacts.CONTENT_URI, values);
  long rawCOntactId= ContentUris.parseId(rawContactUri);
  // 往data表插入姓名数据
  values.clear();
  values.put(Data.RAW_CONTACT_ID, rawContactId);
  values.put(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);// 内容类型
  values.put(StructuredName.GIVEN_NAME, name);
  mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
    values);

  // 往data表插入电话数据
  values.clear();
  values.put(Data.RAW_CONTACT_ID, rawContactId);
  values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
  values.put(Phone.NUMBER, number);
  values.put(Phone.TYPE, Phone.TYPE_MOBILE);
  mContext.getContentResolver().insert(ContactsContract.Data.CONTENT_URI,
    values);
 }

更多详情见请继续阅读下一页的精彩内容: 2014-05/1018p2.htm


推荐阅读
author-avatar
sferra石_455
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有