内容提供者ContentProvider与内容接受者ContentResolver的使用详解

ContentProvider的使用

概念:contentprovider是内容提供者,很明显,内容提供者就是提供数据的,它是用来将自己的数据暴漏出来,供其他的程序访问并且进行增删改查的,同样的他也是四大组件之一,他的创建也需要在清单文件中声明,这里就不详细的描述了,先简单的描述一下他的使用方法,


步骤:1,创建类,继承自contentprovider,

   

    2,创建一个匹配器,用来进行数据访问时数据的匹配


     3,实现需要实现的方法,这里的实现的方法就是想要做的事情,并不是全部都要实现,共有六中方法。

4,清单文件中注册,并写上权限,权限就是匹配器中的权限,



实现::::::::::::匹配器::::::::::::::::::::::方法判断::::::::::::::::::::::


创建类:

//继承并实现六个方法,不需要的可以不操做,他们的参数和sql非常的相似,都是通过占位符和条件进行约束的,
public class MyProvider extends ContentProvider{// query:查询//    insert:插入//    update:更新//    delete:删除//    getType:得到数据类型//    onCreate: private static UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);//初始化匹配器 static{//创建静态代码块,随着类的加载而加载,声明周期和类相同,// 给匹配器添加uri用来当做一把钥匙,别的程序只有符合相应操作的钥匙匹配才会打开相应的方法,你可以这么理解



        //模式可以使任意整数,这里以1,2为例,使用#通配符代表任意的表,使用#带表表中的任意的一行,
//首先:一个标准的uri的写法是这样的:content:://com.example.administrator.Myprovider/table1


//        matcher.addURI("权限,这里你可以写这个类的包名加类名","访问的路径,也就是相应的表名",模式);
 matcher.addURI("com.example.administrator.Myprovider","table1",1); matcher.addURI("com.example.administrator.Myprovider","table1/#",2); }// 有了匹配器,就可以通过匹配器的匹配进行操作了,只要其他程序传递过来的uri符合其中的某一个uri就打开某一个uri来共对方使用,否则,对方无法操作,这也保证数据的安全性// 这里只是通过查询为例,其实大同小异,这里就写查询为例子进行简单的描述 @Override public boolean onCreate() {
//初始化,只有当程序视图访问是才会被初始化
        return false;
    }

    @Nullable
    @Override//参数:uri标识,确定查询的列的集合,s,string1两个用来约束查询那些行,最后是排序的方式。
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
//        先匹配uri,判断符合哪个
        switch (matcher.match(uri)){
//            如果是1,匹配mode是一的
            case 1:
                
                break;
            //如果是2,符合是2的mode这样就进行相应的操作即可
            case 2:
                
                break;
        }
        return null;
    }

    @Nullable
    @Override//通过uri返回一个MIME类型的串,这个方法用的不多。
    public String getType(Uri uri) {
        return null;
    }

    @Nullable
    @Override//参数uri标识,插入的内容存放在contentvelues里,
    public Uri insert(Uri uri, ContentValues contentValues) {
        return null;
    }

    @Override//uri标识,后两个参数约束删除的行数
    public int delete(Uri uri, String s, String[] strings) {
        return 0;
    }

    @Override//uri标识,数据源,最后两个约束更新的那些行行数,和sql非常的相似,都是通过占位符和条件进行约束的,
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
        return 0;
    }
}

内容就不写例子了,相信大家一看就会理解,多了反而啰嗦,最后记得在清单中注册就行了。
<provider
    android:authorities="com.example.administrator.MyProvider"
    android:name=".MyProvider"/>这里一定要写明权限,不然会出大事的,哈哈



这样一看是不是非常的简单.,既然能够创建提供者,我们在创建一个接受者看看两者的关系吧?





创建一个内容接受者(我是这么叫的,可能大家命名不同,不影响技术交流)contentresover,

首先创建接受着对象,然后就可以通过对象直接调用其中的方法了,只需要将uri对象传入,再将占位符和条件等传入,就能够直接进行对库进行操作,前提是uri必须和提供者的一致,现在分析一下上边的提供者,和下边的接受者,你发现了什么???uri是不是一样呢?现在的你多多少少理解了吧





public class MainActivity extends AppCompatActivity {
    private ContentResolver resolver;
    public static final String URI = "";

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

        resolver = getContentResolver();
        Uri uri = Uri.parse("content:://com.example.administrator.Myprovider/table1");
        resolver.delete(uri, "id=?", new String[]{"1"});

    }
}












 

                
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值