安卓学习_contentprovider()_查询手机联系人查找

最近小wei在学习安卓,还在学习中。第一次发博客,诸多简陋处,还请包含。

在查询手机内部联系人之前需要知道一点:

联系人表(Contact.CONTENT_URI)和联系人信息表(CommomDataKinds.Phone.CONTENT_URL)上的联系人信息和电话号码不在同一张表 上

两者之间由联系人表和联系人信息表的外键联系起来。

知道这个以后,就可以有方法来得到手机内部的联系人信息!

通过查询所有的联系人名字,然后得到对应的联系人id,因为id为两表的外键,所以可以通过得到的id值来推出对应联系人的手机号码!

联系人名字~~~联系人id~~~联系人手机号码

在新创建的项目里定义一个Listview,这个ListView需要一个adapter来填充数据

那该用哪个adapter呢?因为在两张表里分别有两个cuseradapter(用于取得对应id),这两个adapter都是我们不需要用的。故不适用simplecuseradapter。相反,可以使用baseadapter:通过联系人的名字得到对应id值,形成一个javabean的对象。

getview 是子布局视图。


代码实现:

1在activity_main.xml中定义一个Listview

2新建一个PhoneNumber类,javabean形式 定义两个变量 phontId,userNam,来填充数据

   3.新建一个Myadapter类,继承baseAdabpter,定义两个变量:数据源和子布局,把adapter完善,包括item_main_lv.xml和viewholder类

  4.在mainactivity 声明 adapter,数据源,关键代码:

ContentResolver cr = getContentResolver();//得到ContentResolver对象
Cursor c = cr.query(Contacts.CONTENT_URI, new String []{Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null);//得到对应的联系人id和联系人名字
while (c.moveToNext()) {
int id = c.getInt(0);//得到联系人id
String name = c.getString(1);//得到联系人名字
Cursor c1 = cr.query(CommonDataKinds.Phone.CONTENT_URI, new String[](接下一行) {CommonDataKinds.Phone.NUMBER},CommonDataKinds.Phone.CONTACT_ID+"=?" , new String[]{id+""}, null);//得到对应的联系人number
if(c1.moveToNext())
{
String number = c1.getString(0);得到联系人number
PhoneNumber pn = new PhoneNumber(name, number);//新定义一个pn对象加入对应name和number(方法每运行一次,新建并添加一次)
numbers.add(pn);//将得到的pn加入numbers数据源中
}
}

//要在清单文件中加权限~~


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值