Android—ContentProvider读取系统联系人

来源:互联网 发布:福州市第一中学 知乎 编辑:程序博客网 时间:2024/06/02 20:40

我们主要是利用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 以上

0 0