移动开发作业三: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的应用

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

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

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进行声明,如下:

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

resolver app代码

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

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

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

; 四、运行展示截图

移动开发作业三:ContentProvider的应用
插入数据前数据库中有2条记录:
移动开发作业三:ContentProvider的应用

插入后变为3条记录

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

五、源码仓库地址

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

Original: https://blog.csdn.net/m0_52229959/article/details/128007982
Author: Alltale
Title: 移动开发作业三:ContentProvider的应用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/816148/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球