Android—ContentProvider读取系统联系人

时间:2022-06-17 22:56:28

我们主要是利用ContentProvider来共享其他程序的数据
需要借助ContentResolver类
这个类提供了一系列对数据处理的方法
读取联系人主要用到了查询方法,query();

来看一下核心代码

public void InitDate(){
Cursor cursor =null;//Cursor 是每行的集合。
try{
cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,null,null,null);
//实例化ContentResolver 并查询联系人信息
while(cursor.moveToNext()){
String playname=cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
//获取联系人姓名
String numbel = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
//获取联系人电话
Peo P = new Peo(playname,numbel);
contactsList.add(P);
}
}catch (Exception e){
e.printStackTrace();
}finally {
if (cursor!=null) {
cursor.close();
}
}
}

核心代码就是这么多
其他的主要就是把数据放到listview中显示出来就好了
github源码下载地址

这个项目中的listview是已经经过两层优化的
我是把信息作为一个类传递给适配器的
嗯 在敲的过程中还遇到这样一个问题
There is no default constructor available in super()
这是我在继承ArrayAdapter的时候,子类出现该错误。创建构造函数依旧出错
原因是 ArrayAdapter没有无参构造函数,所以子类继承时,构造函数中必须显式调用父类构造方法,并且传递对应所需要的参数。
子类初始化的时候,先调用父类的构造方法。只有初始化以后再能调用类里面的非静态方法。在执行构造器前之前,当前类及父类所有的静态方法,静态变量,静态代码块都提前执行了

大概就酱紫 啦啦啦
over 以上