Android 四大组件之一 ContentProvider

学习自:http://blog.csdn.net/worker90/article/details/7016430


ContentProvider概述:

Android四大组件之一,用于对应用程序中的数据的共享和操作,我们通过ContentProvider可以
对Android中的音频,视频,图片,联系人等 进行增删改查操作。


个人对ContentProvider的见解:

Android的数据存储方式总共有五种,Shared Preferences、网络存储、文件存储、外储存储、SQLite。
每个程序存储数据可能用到其中的一种。假如,我要对Android中的联系人进行操作,此时,我不知道
Android中联系人是用那种方式存储的。这就是个问题。 那么ContentProvider就能满足这个需求,
一个类继承了ContentProvider方法,就会重写此类的增删改查方法,而这些方法在每个程序内部编写。
所以就不会存在这一问题。要调用数据,直接操作ContentProvider就可以了。


如何实现ContentProvider

1.理解Uri Uri:通用资源标识符

  

A:前缀表明数据受控于一个内容提供者。它从不修改,也就是schema

B:是指在AndroidMainfest.xml中我们注册的provider中的android:authorities属性所对应的

C:具体操作于哪个条目

D:具体指定到哪个条目下的哪条记录


2.UriMatcher 用于uri的注册和匹配:
  实例化:UriMatcher  sMatcher = new UriMatcher(UriMatcher.NO_MATCH);
  方法:1.sMatcher.addURI(“com.jiahui.provider.myprovider”, “person”, 1);//匹配此uri,如果匹配成功则返回最后一个参数1
                  sMatcher.addURI(“com.jiahui.provider.myprovider”, “person/#”, 2);//匹配此uri,如果匹配成功则返回最后一个参数2
              2.sMatcher.match(uri); 此方法会返回已经加入的addURI,比如上面两个,如果没有就会返回-1

        
3.ContentUris 用于在Uri后面追加一个ID或者解析出传入的Uri所带上的ID值
  方法:1.public static long parseId (Uri contentUri) //从路径中获取ID部分
               2.public static Uri withAppendedId (Uri contentUri, long id) //用于为路径加上ID部分


4.ContentResolver类:用于操作ContentProvider类
  增:Uri url = Uri.parse("content://com.jiahui.provider.myprovider/person");  、
          ContentValues values = new ContentValues();  
          values.put("name", edtname.getText().toString());  
          values.put("age", edtage.getText().toString());  
          Uri result = this.getContentResolver().insert(url, values);  
          if (ContentUris.parseId(result)>0) {
               sysou("添加成功");
          }
  删:Uri uri = Uri.parse(“content://com.jiahui.provider.myprovider/person/2”);  
          int result = contentResolver.delete(uri, null, null);  
          if (result >= 1) {  
              sysou("删除成功");
          }
  改:Uri uri = Uri.parse("content://com.jiahui.provider.myprovider/person/3");  
          ContentValues values = new ContentValues();  
           values.put("name", edt_item_name.getText().toString());  
           values.put("age",  Integer.parseInt(edt_item_age.getText().toString()));  
           int result = contentResolver.update(uri, values, null, null);  
           if (result >= 1) {  
               sysou("修改成功");
           }
  查:Uri url = Uri.parse("content://com.jiahui.provider.myprovider/person");  
          Cursor cursor = context.getContentResolver().query(url, new String[] { "_id", "name", "age" }, null, null, "_id");
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值