*【数据修改】contentprovider

如何理解ContentProvider?
数据ContentProvider<—–增,删,改,查(通过Uri访问)其他程序等等

实现ContentProvider方法
1.继承抽象类ContentProvider实现一系列针对数据的增,删,改,查等方法;
2.需在AndroidMainfest.xml中完成对ContentProvider的注册
< provider
android:name=”com.imooc.MusicProvider”
android:authorities=”com.provider.music”>
< /provider>
注册authorities属性值时全局唯一的

创建一个类继承抽象类contentprovider
oncreat(在创建后被调用)
delete(根据uri删除selection指定的条件所匹配全部记录)
insert(根据uri插入values对应的数据)
update(根据uri修改selection指定的条件所匹配的全部记录)
query(更加uri查询出selection指定的条件所匹配的全部记录,并且可以指定查询哪些列以什么方式排序)
getType(返回当前uri的MIME类型,如果uri对应数据包括多条记录那么MIME类型字符串就是以vnd.android.dir/开头 如果只对应一条记录就是vnd.android.cursor.item/开头)

Uri是指通用资源标志符—–content://com.imooc.provider/music/#

content://—前缀表明数据受控于一个内容提供者.它从不修改,也就是schema
com.imooc.provider—是指在AndroidMainfest.xml中我们注册的provider中的authorities属性所对应的唯一的
/music—具体操作于哪个条目
/#—具体指定到哪个条目下的那条记录(#标识通配符)

UriMatcher类
UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);
UriMatcher.NO_MATCH 表示不匹配任何路径的返回码
matcher.addURI(“com.imooc.provider”,”music”,1);
往UriMatcher类里面添加一个拼凑的Uri
UriMatcher为一个Uri的容器,容器里面包含着我们即将可能要操作的Uri
如果通过match()方法匹配成功就返回code值
matcher.match(uri)
受限与通过addURI()方法添加进来的Uri匹配
匹配成功则返回设置的code值,反之,返回一个UriMatcher.NO_MATCH常量(-1)

ContentResolver:
-使用ContentResolver操作ContentProvider中的数据:
当外部应用需要对ContentProvider中的数据进行添加,删除,修改和查询操作时,可以使用ContentResolver类来完成
使用Activity提供的getContentResolver()方法获取ContentResolver对象
ContentResolver类提供了与ContentProvider类相同签名的四个方法

/**查电话号码,需要先查出人名和对应的id,然后才能根据人的id把所有人的号码查出
来再得到一个游标对象进行处理(游标套游标),例子如下:下面的id就是联系人的id
,查询联系人的id是查询的联系人的那个表。而查询电话号码是另一个表了,但是通过
联系人id和联系人表连在一起的。*/
Cursor c1 = cr.query(Phone.CONTENT_URI, new String[] {Phone.NUMBER, Phone.TYPE}
,Phone.CONTACT_ID + "=" + id, null, null);
// 根据联系人ID查询出联系人的电话号码
if (c1 != null) {
    while (c1.moveToNext()) {
        int type = c1.getInt(c1.getColumnIndex(Phone.TYPE));
        if (type == Phone.TYPE_HOME) {
            Log.i("info","家庭电话:" + c1.getString(c1.getColumnIndex(Phone.NUMBER)));
        } else if (type == Phone.TYPE_MOBILE) {
            Log.i("info","手机:" + c1.getString(c1.getColumnIndex(Phone.NUMBER)));
        }
    }
    c1.close();
}

DemoContentProvider I

/*
 * 准备工作:
 * ContentResolver cr 是关联 uri
 * values 插入 uri
 * 然后 ContentUris.parseId(uri)返回uri的id
 */
onCreate{
    ContentResolver cr = getContentResolver();
    Cursor c = cr.query(Contacts.CONTENT_URI, new String[]
    {Contacts._ID,Contacts.DISPLAY_NAME}, null, null, null);
    if(c!=null){
        while(c.moveToNext()){
            int id=c.getInt(c.getColumnIndex("_id"));
            String name=c.getString(c.getColumnIndex("display_name"));
            Log.i("TAG", "_id:"+id);
            Log.i("TAG", "name:"+name);
            Cursor c1=cr.query(Phone.CONTENT_URI
            , new String[]{Phone.NUMBER,Phone.TYPE}
            , Phone.CONTACT_ID+"="+id, null, null);
            //根据联系人的ID查询联系人的电话号码
            if(c1!=null){
                while(c1.moveToNext()){
                    int type=c1.getInt(c1.getColumnIndex(Phone.TYPE));
                    String number=c1.getString(c1.getColumnIndex(Phone.NUMBER));
        if(type==Phone.TYPE_HOME){  
            Log.i("TAG", "家庭电话:"+number);
        }else if(type==Phone.TYPE_MOBILE){
            Log.i("TAG", "手机号码:"+number);
        }
    }
    c1.close();
}

DemoContentProvider I(下)

//根据联系人的ID查询联系人的邮箱地址
Cursor c2=cr.query(Email.CONTENT_URI, new String[]
{Email.DATA,Email.TYPE}, Email.CONTACT_ID+"="+id, null, null);
if(c2!=null){
    while(c2.moveToNext()){
        int type=c2.getInt(c2.getColumnIndex(Email.TYPE));
        String data=c2.getString(c2.getColumnIndex(Email.DATA));
        if(type==Email.TYPE_WORK){
            Log.i("TAG", "工作邮箱:"+data);
        }
    }
    c2.close();
}

网络权限

<uses-permission android:name="android.permission.READ_CONTACTS"></uses>

DemoContentProvider II

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ContentResolver cr = getContentResolver();
    //向联系人中插入一行数据
    ContentValues values=new ContentValues();
    Uri uri = cr.insert(RawContacts.CONTENT_URI, values);
    Long raw_contact_id = ContentUris.parseId(uri);
    //插入人名
    values.put(StructuredName.RAW_CONTACT_ID, raw_contact_id);
    values.put(StructuredName.DISPLAY_NAME, "慕课网");     
    values.put(StructuredName.MIMETYPE, 

    StructuredName.CONTENT_ITEM_TYPE);
    uri=cr.insert(Data.CONTENT_URI, values);
    //插入电话信息
    values.clear();
    values.put(Phone.RAW_CONTACT_ID, raw_contact_id);
    values.put(Phone.NUMBER, "15555221010");
    values.put(Phone.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
    uri=cr.insert(Data.CONTENT_URI, values);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值