Androidx学习笔记(81)--- 内容提供者(ContentProvider)

内容提供者

  • 应用的数据库是不允许其他应用访问的
  • 内容提供者的作用就是让别的应用访问到你的数据库
  • 内容提供者的作用:把私有数据暴露给其他应用,通常,是把私有数据库的数据暴露给其他应用 
  • 自定义内容提供者,继承ContentProvider类,重写增删改查方法,在方法中写增删改查数据库的代码,举例增方法

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        db.insert("person", null, values);
        return uri;
    }
    
  • 在清单文件中定义内容提供者的标签,注意必须要有authorities属性,这是内容提供者的主机名,功能类似地址

    <provider android:name="com.exp.contentprovider.PersonProvider"
        android:authorities="com.exp.person"
        android:exported="true"
     ></provider>
    
  • 创建一个其他应用,访问自定义的内容提供者,实现对数据库的插入操作

    public void click(View v){
        //得到内容分解器对象
        ContentResolver cr = getContentResolver();
        ContentValues cv = new ContentValues();
        cv.put("name", "小方");
        cv.put("phone", 138856);
        cv.put("money", 3000);
        //url:内容提供者的主机名
        cr.insert(Uri.parse("content://com.exp.person"), cv);
    }
    

UriMatcher

  • 用于判断一条uri跟指定的多条uri中的哪条匹配
  • 添加匹配规则

    //指定多条uri
    um.addURI("com.exp.person", "person", PERSON_CODE);
    um.addURI("com.exp.person", "company", COMPANY_CODE);
    //#号可以代表任意数字
    um.addURI("com.exp.person", "person/#", QUERY_ONE_PERSON_CODE);
    
  • 通过Uri匹配器可以实现操作不同的表

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        if(um.match(uri) == PERSON_CODE){
            db.insert("person", null, values);
        }
        else if(um.match(uri) == COMPANY_CODE){
            db.insert("company", null, values);
        }
        else{
            throw new IllegalArgumentException();
        }
        return uri;
    }
    
  • 如果路径中带有数字,把数字提取出来的api

    int id = (int) ContentUris.parseId(uri);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值