联系人的获取--ContentProvider

ContentProvider:
1、ContentProvider为存储和读取数据提供统一的接口;
2、使用ContentProvider,应用程序可以实现数据共享;
3、android内置的许多数据都是使用ContentProvider形式,供开发者调用(如视频、音频、图片、通讯录等);


 URI:Universal Resource Identifier 
要操作的数据,Android上可用的每种资源-图像,视频片段、网络地址等都可以用Uri来表示;
e.g:联系人URI 为content://contacts/people
1:需要操作的ContentProvider;2:对ContentProvider中的什么数据进行操作
由以下几个部分组成:
ContentProvider(内容提供者)的scheme已经由Android规定,scheme为:content://
主机名(authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它;contacts
路径(path)可以用来表示我们要操作的数据:/people

使用ContentResolver操作ContentProvider中的数据:
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成(使用getContentResolver()方法获取);
ContentResolver类提供了与ContentProvider类相同签名的四个方法:
public Uri insert(Uri uri,ContentValues values):该方法用于往ContentProvider添加数据。
public int delete(Uri uri,String selection,String[] selectionArgs);该方法用于从ContentProvider删除数据。
public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs);该方法用于更新ContentProvider中的数据。
public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder):该方法用于从ContentProvider获取数据。

e.g:
ContentResolver resolver = getContentResolver();//获取ContentResolver
Uri uri = Uri.parse(“content://contacts/people”);//要操作的ContentProvider
ContentValues values = new ContentValues();
values.put(“name”,”sunrise");
values.put(“number”,”18617191218”);  
resolver.insert(uri,values);

监听ContentProvider中数据的变化
调用getContentResolver().notifyChange(uri,null)来通知注册在此URL上的访问者。

Listview SimpleAdapter:
/**SimpleAdapter属于Adapter适配器的一种,是数据和listview之间的桥梁
         * 第一个参数:Activitiy的上下文
         * 第二个参数:生成的一个Map列表选项
         * 第三个参数:listview一行的分布样式,可以自己定义,可以使用Android系统本身
         * 第四个参数:定义Map中有哪些key
         * 第五个参数:用来填充的组件,对应于第四个参数中的key
**/

adapter = new SimpleAdapter( this , getData(), R.layout. listview ,  
                         new  String[]{ "number" , "name" },
                                               new int []{R.id. number ,R.id. name });

getData():返回一个List<Map<String,String>>的一个列表。

/**定义存储数据的List,并返回给SimpleAdapter**/
List<Map<String,String>> contact = new ArrayList<Map<String,String>>();

/**使用ContentResolver操作ContentProvider中的数据**/
ContentResolver resolver = getContentResolver();

/**使用query获取ContentProvider的数据
Android2.0以后联系人就由ContactsContract类替换了People类
**/
Cursor c = resolver.query(ContactsContract.Contacts. CONTENT_URI ,
null , null , null , null );

/*获取特定的数据列,并按照联系人姓名排列*/
Cursor c = resolver.query(ContactsContract.Contacts. CONTENT_URI ,
PHONES_PROJECTION , null , null , "display_name desc" );
第一个参数:URL,确定要操作的数据(指定所要操作的ContentProvider)
第二个参数:指定列的数据
第三个参数:指定行的数据
第四个参数:
第五个参数:可以定义返回数据的排列

然后使用Cursor来对我们的联系人数据进行处理:
行、列;
e.g:获取联系人姓名
/*首先获取联系人处于该数据库的第几列*/
int displayNameColumn = c.getColumnIndex(ContactsContract
.Contacts.DISPLAY_NAME);
/*然后获取该列的数据即是要取得的联系人的姓名(行数由c.movoToNext()来交互)*/
String name = c.getString(displayNameColumn)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值