Android四大组件之ContentProvider

作用:数据提供,并可提供应用程序之间的数据共享,通过Uri访问
使用系统自带的ContentProvider
1、调用Activity自带的方法getContentResolver();获得ContentResolver对象
2、调用ContentResolver的四个方法:增删改查
代码实现查询手机上的id和联系人:

ContentResolver cr = getContentResolver();      
        //调用ContentResolver提供的四个方法:增删改查
Cursor c  = cr.query(ContactsContract.Contacts.CONTENT_URI, new String[]{ContactsContract.Contacts._ID,ContactsContract.Contacts.DISPLAY_NAME}, 
                null, null, null);
        if(c!=null){
            while(c.moveToNext()){
        //ContactsContract.Contacts._ID
            System.out.println(c.getInt(c.getColumnIndex("_id")));       System.out.println
            (c.getString(
            c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            }
        }

//取出系统自带属性,可以在ContactsContract.Contacts.列名中查找
由于id是唯一的,而号码是和他一一对应。所以应当用id差号码,若直接查会导致顺序错误
要查找电话号码,应当如下写:

int id = c.getInt(c.getColumnIndex("_id"));
Cursor c1 = cr.query(Phone.CONTENT_URI, new String[]{
                        Phone.NUMBER,Phone.TYPE
                }, Phone.CONTACT_ID+"="+id, null, null);
if(c1!=null){
    while(c1.moveToNext()){
                        int phone = c1.getInt(c1.getColumnIndex(Phone.TYPE));
                        if(phone == Phone.TYPE_HOME){
                            System.out.println("家庭电话:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
                        }else if(phone == Phone.TYPE_MOBILE){
                            System.out.println("手机:"+c1.getString(c1.getColumnIndex(Phone.NUMBER)));
                        }
                    }
}
    c1.close();

若是查询邮箱,则根据id继续查询邮箱地址,原因同上,id唯一,而其他的可能相同:

Cursor c2 = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                        new String[]{ContactsContract.CommonDataKinds.Email.DATA,ContactsContract.CommonDataKinds.Email.TYPE}, 
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID+"="+id, null, null);

然后遍历输出

要想插入一条记录,需进行如下操作:

ContentResolver cr1 = getContentResolver();
        ContentValues cvs = new ContentValues();
        Uri uri = cr1.insert(RawContacts.CONTENT_URI, cvs);
        Long raw_contact_id = ContentUris.parseId(uri);
        cvs.clear();
        cvs.put(StructuredName.RAW_CONTACT_ID, raw_contact_id);
        cvs.put(StructuredName.DISPLAY_NAME, "梁东升");
        cvs.put(StructuredName.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE);
        uri = cr1.insert(Data.CONTENT_URI, cvs);
        //插入电话
        cvs.clear();
        cvs.put(Phone.RAW_CONTACT_ID, raw_contact_id);
        cvs.put(Phone.NUMBER, "13971600604");
        cvs.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
        uri = cr.insert(Data.CONTENT_URI, cvs);

自定义ContentProvider:
1、继承抽象类ContentProvider,实现一系列对数据增删改查的方法
2、需要在AndroidManifest.xml里面对ContentProvider进行注册

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值