android学习 关于contentprovider

  content provider 内容提供者,这是四大组件之一。之前由于数据库部分没有弄好,所以对这一部分的学习只是看了一下,感觉不是很深刻。

代码,还是必须要不断的敲才有有感受,最好是能够知道怎么敲,如果实在不行,抄一遍也比光看有效果。

跨程序共享数据,推荐用contentprovider这个组件。

新建一个类,继承自contentprovider,必须实现六个方法,oncreate、query、insert、update、delete、getType。具体描述看书上p278页。

每个方法都有uri这个参数,这个参数是通过调用contentresolver传递进来的。一个标准的Uri一般是content://com.example.app.provider/table1

表示访问这个app应用的table1表中的数据。接着需要用urimatcher来匹配内容URI的功能,传入权限、路径、自定义代码。

static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI("com.example.app.provider", "table1", TABLE1_DIR);
uriMatcher.addURI("com.example.app.provider ", "table1/#", TABLE1_ITEM);
uriMatcher.addURI("com.example.app.provider ", "table2", TABLE2_ITEM);
uriMatcher.addURI("com.example.app.provider ", "table2/#", TABLE2_ITEM);
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
switch (uriMatcher.match(uri)) {
case TABLE1_DIR:
// 查询table1表中的所有数据
break;
case TABLE1_ITEM:
// 查询table1表中的单条数据
break;
case TABLE2_DIR:
// 查询table2表中的所有数据
break;
case TABLE2_ITEM:
// 查询table2表中的单条数据
break;
default:
break;
}

当传入uri的时候,调用query方法时,会用match方法,看会返回什么代码,然后执行相应的操作。

相当于是一个正面清单的作用,我只规定能访问的数据,如果隐私数据,则不用adduri来对这些数据添加到contenprovider中

这就起到了安全机制的作用。

还需要在manifest.xml注册。


另外建立一个app,在里面通过contentresolve来读取数据。

addData.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 添加数据
Uri uri = Uri.parse("content://com.example.databasetest.
provider/book");
ContentValues values = new ContentValues();
values.put("name", "A Clash of Kings");
values.put("author", "George Martin");
values.put("pages", 1040);
values.put("price", 22.85);
Uri newUri = getContentResolver().insert(uri, values);
newId = newUri.getPathSegments().get(1);
}
});

先要将uri parese一下,将数据放在contentvalues中,调用insert方法就可以了。

学了broadcastreciver之后,感觉这个和那个有点类似,都是不同程序之间的通讯。
不同的是,一个是通过广播来启动一些代码,一个是通过uri来访问数据。

对这个的体会不深,可能和数据库不是很熟悉有关吧。
再说再说,这个就做到这里吧!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值