《第一行代码》学习之旅--第7章-内容提供者ContentProvider

前言: 我们的选择决定我们的生活内容,接触的领域也是如此.今天我带大家打算了解这个四大组件之一的内容提供者.

它的核心功能是用于实现应用程序间的数据共享,同时能保证被访问数据的安全性,目前
它是android实现跨程序共享数据的标准模式.

ContentResolver如何用?

ContentProvider就像一个掌握共享数据的仓库,如果要拿这些共享数据,必然要借助什么东西去拿了,
它就是 ContentResolver,它里面提供了一系列方法对这些共享数据进行增删改查的操作,

insert  增加数据
update  更新
delete  删除数据
query   查询数据

这么看,这家伙和sqlitedatabase比较相似.不过ContentResolver增删改查不需要接收表名,而是使用uri代替,
这个参数叫所谓的内容URL.这个内容URL就像ContentProvider中共享数据的id或者唯一标识符一样,组成
是:

    authority+path

前者用于区别应用程序,后者用于对应用程序中的不同表做区分的.内容提供者格式写法如下:

    content://com.xxx.app.provider/table

ContentProvider得到这些内容URI字符串后,我们还需要将它解析成Uri对象才可以作为参数传入.也就是我们要去仓库(ContentProvider)取东西,取东西的人必须要登记验证(转为Uri对象).

    Uri uri =Uri.parse("content://com.xxx.app.provider/table");

验证后,我们就要去仓库去数据了,

    Cursor cursor = getContentResolver().query(uri,projection,selection,selectionArgs,sortOrder);       

uri from table_name 指定查询某个应用程序下的一张表
projection select column1,column2 指定查询的列名
selection where column = value 指定where的约束条件
orderBy order by column1,column2 指定查询结果的排序方式

查询完后,返回的是一个cursor对象,这时我们就从cursor对象中逐个读取数据了,读取的思路是通过移动游标的位置遍历cursor的所有行,然后再取出每一行相应列的数据.书中查询数据代码实例:

if(cursor!=null){
  while(cursor.moveToNext()){
    String column1 = cursor.getString(cursor.getColumnIndex("column1"));
    int column2 = cursor.getInt(cursor.getColumnIndex("column2"));
    }
    cursor.close();
}

增加(插入)数据:

 ContentValues values = new ContentValues();
 values.put("column1","text");
 values.put("column2",1);
 getContentResolver().insert(uri,values);

更新(修改)数据:

ContentValues  values = new ContentValues();
values.put("column1","");
getContentResolver().update(uri,values,"column1=? and column2 = ?",new String[]{"text,"1"});

删除数据:

getContentResolver().delete(uri,"column2=?",new String[]{"1"});

接下来我们学习自定义的ContentProvider,新建一个类去继承ContentProvider.ContentProvider类中有
6个抽象方法,需要将6个方法进行重写,分别是:

onCreate  boolean           初始化内容提供者时调用
query     Cursor            查询数据
insert    Uri               使用uri参数来确定要添加的表,待添加的数据保存在values参数中.                               返回一个用于表示这条记录的URI.

update    int               使用uri参数来确定要更新的表,新数据保存在values参数中,selection
和selectionArgs参数用于约束更新哪些行,受影响的行数将作为返回值返回.

delete    int               从内容提供者删除数据.使用uri参数来确定要删除的表中的数据,
selection和selectionArgs参数用于约束删除哪些行,被删除的行数将作为返回值返回.
getType   String            我们传入一个内容URI来返回相应的MINE类型

最后,记得在AndroidMainifest.xml中注册内容提供者.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值