移动开发作业三:ContentProvider的应用

ContentProvider的应用

一、设计目标

​ 1、contentprovider是安卓四大组件之一,请使用其方法类进行数据获取;

​ 2、请自建一个provider,然后在另一个app中使用resolver调用这个provider。

​ 3、本次作业请启用新项目,理论上需要两个APP进行实验。

二、功能说明

​ 使用contentprovider来实现app之间的数据共享,即可以在一个app中访问另一个app的数据。

三、代码解析

​ 使用ContentProvider来进行数据共享时需要统一的数据访问放式,具体的,它通过URI映射来判断需要操作的数据库中的哪张表,并进行增、删、改、查。URI的用处就是描述路径。
URI格式为:schema+authority+path+id,其中schema在Android中固定设置为"content://“。authority为外部应用找到该ContentProvider的唯一标识,一般为包名。path即要操作的数据库表,如/zDB。id代码单个记录的URI,可省略,省略时表示整张表的数据。

具体代码实现如下(包含2个app):

provider app代码

在这里插入图片描述

首先,ContentProvider是一个抽象类,故需要我们定义一个MyContentProvider类来继承它并重写其各个方法。代码18~22重写了onCreate方法,将在创建ContentProvider时调用,对Dao层对象进行初始化。此外,还有数据库对应的增删改查方法,此处以insert方法为例,在其中调用myDao的DaoInsert方法。

在这里插入图片描述

MyDao中15、16行在构造函数中对SQLiteDatabase的操作对象进行初始化,代码19~24行即DaoInsert方法,该方法接收ContentValues参数,第20行进行数据库中的user表的插入操作将参数values插入Sqlite,21-23行将新插入的数据行号追加到URI后得到newUri,并调用
context.getContentResolver().notifyChange(newUri,null)方法通知ContentObserver数据发生了变动。
最后还有在AndroidManifest.xml中对MyContentProvider进行声明,如下:

在这里插入图片描述

resolver app代码

在这里插入图片描述

代码16行通过getContentResolver方法获取ContentResolver实例,在23行通过调用该实例的insert方法并指定URI来进行对provider app中的数据增删改查操作。此外,还要在本app的AndroidManifest.xml中配置包的可见性,因为在Android 11中为了用户的安全性和隐私性,引入了包的可见性概念。如果没有该声明。除了默认的一些应用外,其他应用之间不能直接进行交互。
在这里插入图片描述

四、运行展示截图

在这里插入图片描述
插入数据前数据库中有2条记录:
在这里插入图片描述

插入后变为3条记录

在这里插入图片描述

五、源码仓库地址

https://gitee.com/zzjavac/android/tree/master/ex3

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值