安卓四大组件ContentProvider的使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


ContentProvider组件


提示:以下是本篇文章正文内容,下面案例可供参考

一、设计目标

1.使用安卓四大组件ContentProvider,用其方法进行数据获取
2.在两个app之间之间进行数据库的操作。

二、功能说明

1.使用到两个app,一个是provider,一个是resolver
2.使用安卓内置的SQLite数据库来进行数据库操作
3.利用ContentProvider实现两个进程之间的通信,在resolver中调用provider实现数据库的增删改查。


三、代码解析

1.provider APP

① 创建数据库和生成数据库

在这里插入图片描述

②ContentProvider中方法实现dao类

1.在dao类的构造函数中新建一个数据库,同时使用getWritableDabase()函数来使此数据库可写,调用这个函数的同时MyDBHelper中的onCreate()函数也会执行,生成表。
2.统一资源标识符(URI)用来唯一标识 ContentProvider中的数据,外界进程通过 URI 找到对应的ContentProvider中的数据,再进行数据操作。
3.URI分为 系统预置 和自定义,分别对应系统内置的数和自定义数据库。这里dao类中的uri是一个自定义uri。
在这里插入图片描述

③MyContentProvider

在这个里面首先定义一个dao类变量,用于之后调用其中的方法,这里需要在onCreate中调用dao类的构造函数,不然会报错。
在这个作业里主要实现的就是不同app之间数据库的Insert操作,对于其他的crud,道理都是一样的,所以这里在ContentProvider的insert方法里调用在dao类中实现的insert方法。
在这里插入图片描述
在这里插入图片描述

⑤ MainActivity中调用dao类的构造函数以及在Manifest中注册provider

在这里插入图片描述
这里的name就是你定义的provider类的名字
authorities就是你定义的Authority的名字
这里一定要注册,不然等会reslover调用provider的时候会找不到这个uri
在这里插入图片描述

2.reslover APP

①界面

在这里插入图片描述

②MainActivity

在这里插入图片描述

③启动reslover之后点击insert按钮闪退解决

异常:java.lang.IllegalArgumentException: Unknown URL content:
解决:Android高版本收紧了权限以防止程序随便访问其他程序的文件,所以需要在Manifest中加入语句:

<queries>
        <package android:name="com.itls.providertest"></package>
    </queries>

name为你的provide的r包名

四、运行截图展示

启动provider,查看数据库的时候可能显示数据库一直是closed状态,这里建议debug启动providerAPP,这个时候数据库就不会一启动就是closed状态
1.未执行insert之前,这里显示的是provider的数据库
在这里插入图片描述
2.启动reslover,并执行insert后
这里显示的还是provider app的数据库,但我们是在reslover中进行insert操作的,实现了不同app之间的通信。
在这里插入图片描述

五、Gitee仓库

链接: 第三次作业

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值