安卓第三次作业:四大组件之contentprovider

一.实验环境:

Windows系统,Android Studio

二.界面功能

1.本次作业使用到了两个app,一个名称为ContentProvider,一个名称为ContentResolver

2.通过contentprovider相关组件进行不同app之间的数据库操作

3.通过sqlitedatabase来使用安卓内置的数据库,较为方便和安全

三.界面设计代码

ContentProvider

activity_main界面较为随意,不用在其中添加什么组件,重点在于java文件

MyDBHelper.java

 这个文件是用来创建数据库和生成数据库,当第一次建立数据库时,onCreate函数将会被调用,可以在logcat上观察到它的生命周期。

MyDAO.java

 在这个java文件中,首先利用MyDBHelper的构造函数构建了一个名为“xyhDB”的数据库,版本为1,同时通过getWriableDatabase函数使得此数据库可写,如果不加入这个函数那么在MyDBHelper中的onCreate函数不会被调用,数据库就无法正常生成。

后面还有着插入函数,这里提到了一个概念是uri,关于uri的介绍如下

统一资源标识符(URI)
定义:Uniform Resource Identifier,即统一资源标识符

作用:唯一标识 ContentProvider & 其中的数据,外界进程通过 URI 找到对应的ContentProvider & 其中的数据,再进行数据操作

具体使用
URI分为 系统预置 & 自定义,分别对应系统内置的数据(如通讯录、日程表等等)和自定义数据库
那么在此处uri如图中中所示,是一个自定义uri,对于插入时调用的函数,withAppendId函数用来插入可变的数据,如图中的uri,而AppendId用来插入不变的,固定的信息,此时第一个参数的数据类型就变成了Builder。

MyContentProvider.java

首先声明全局变量myDAO

在insert函数中返回对应的Uri类型的值

 在onCreate函数中调用MyDAO的构造函数(若之间在MyContentProvider中调用MyDAO的构造函数会造成报错,程序无法正常运行)

 MainActivity.java

因为在MyDAO的构造函数中需要使用到创建数据库的MyDBHelper函数,而此函数中的第一个参数是context类型,则可在MainActivity中使用this将context类型的数据传入MyDAO的构造函数中使其可以正常调用MyDBHelper函数。

ContentResolver

activity_main

按下INSERT按钮即可向数据库中加入数据

MainActivity.java

 在这里首先通过了ContentResolver类和ContentValues类创建对象,使用了put函数将需要的值填入values中,最后绑定按钮的点击事件为resolver调用insert插入函数即可。

四、ContentProvider优点和总结

1.安全

ContentProvider为应用间的数据交互提供了一个安全的环境:允许把自己的应用数据根据需求开放给 其他应用 进行 增、删、改、查,而不用担心因为直接开放数据库权限而带来的安全问题

2.访问简单 & 高效

对比于其他对外共享数据的方式,数据访问方式会因数据存储的方式而不同:

(1)采用 文件方式 对外共享数据,需要进行文件操作读写数据;
(2)采用 Sharedpreferences 共享数据,需要使用sharedpreferences API读写数据,这使得访问数据变得复杂 & 难度大。

(3)而采用ContentProvider方式,其 解耦了 底层数据的存储方式,使得无论底层数据存储采用何种方式,外界对数据的访问方式都是统一的,这使得访问简单 & 高效
 

示意图

五、运行结果展示

数据库中的表student初始状态

 点击INSERT按钮之后

 可以发现数据已插入成功,目标完成

 六 .实验小结

   本次作业第一次实现了两个app之间的操作,之前都是所有的操作都在一个项目内,这让我觉得很新奇,在这次作业中我只实现了插入操作,但是对于CRUD操作,一个能实现的话,其他几个也可以以相同的原理实现,在实验中遇到的问题是,在开始测试程序时每次一点击INSERT按钮就报错,在经过网络上的资料搜索,我得知需要在resolver项目中的manifest中加入

 之后就可以正常运行和实现了。

最后附上源代码:

ContentProvider源代码:https://gitee.com/xuyuehuan/ContentProvider.git

ContentResolver源代码:https://gitee.com/xuyuehuan/ContentResolver.git

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值