IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android四大组件——ContentProvider学习总结 -> 正文阅读

[移动开发]Android四大组件——ContentProvider学习总结

ContentProvider简介

内容提供者,是 Android 四大组件之一,是不同应用程序之间进行数据交换的标准API,ContentProvide以Uri的形式对外提供数据,允许其他应用访问和修改数据;其他应用使用ContentResolve根据Uri进行访问操作指定的数据。

使用ContentProvider共享数据的好处是统一了数据访问方式。Android内置的许多数据都是使用ContentProvider形式,如视频,音频,图片,通讯录等。

使用ContentProvider我们经常会用到三个类:ContentProvider、Uri、ContentResolver。

作用示意图

进程间 进行数据交互 & 共享,即跨进程通信。数据源可以是数据库、文件、XML、网络等。

?具体使用

关于ContentProvider的使用主要介绍以下内容:

?

?使用详解-URI

  1. 定义:Uniform Resource Identifier,即统一资源标识符。
  2. 作用:唯一标识 ContentProvider 和其中的数据。外界进程通过 URI 找到对应的ContentProvider & 其中的数据,再进行数据操作
  3. 使用:URI分为系统预置和自定义,分别对应系统内置的数据(如通讯录、日程表等等)和自定义数据库,下面描述自定义Uri。 例如content://com.example.provider.myprovider/test,与网络的Uri类似,其规则如下: content://:协议部分,表示ContentProvider使用的协议,Android规定的固定值。 com.example.provider.myprovider:URI 的标识,通过属性authorities定义,系统通过这个标识找到要对应的ContentProvider;为了保证URI标识的唯一性,它一般是一个完整的、小写的类名。 test:资源所在的路径,访问者可以动态访问不同的资源;如果想要访问具体数据,可以在后面加上该行的ID,例如上述路径下的第1条记录,那么Uri可以写为content://com.example.provider.myprovider/test/1。

?

  • 特别注意:URI模式存在匹配通配符* 和#?
  1. *:匹配任意长度的任何有效字符的字符串 以下的URI 表示 匹配provider的任何内容content://com.example.provider.myprovider/test/*
  2. #:匹配任意长度的数字字符的字符串 以下的URI 表示 匹配provider中的table表的所有行content://com.example.provider.myprovider/test/#?
  3. 若想给ContentProvider添加端口,在注册ContentProvide、访问ContentProvide时也要添加上该端口号其规则如下:

content://com.example.provider.myprovider:200/test

\---------/ \--------------------------------------------------/ \---/

scheme? ? ? ? ? ? ? ? ? ? ? ? ?authority? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?path

使用详解-MIME

  • 简介:全称Multipurpose Internet Mail Extensions,多功能Internet 邮件扩充服务。用来指定某个扩展名的文件用某种应用程序来打开,如指定.html文件采用text应用程序打开。 每种MIME类型由2部分组成:类型 + 子类型:
  • 形式1:单条记录 ?

? ? ? ? ? ?vnd.android.cursor.item/自定义

  • 形式2:多条记录(集合)

? ? ? ? ? vnd.android.cursor.dir/自定义

  • 注:

? ? ?1. vnd:表示父类型和子类型具有非标准的、特定的形式。

? ? ? 2. 父类型已固定好(即不能更改),只能区别是单条还是多条记录

? ? ? 3. 子类型可自定义

使用详解-MIME实例说明

  • String getType(Uri) 用于返回指定的Uri中的数据的MIME类型。
  • 如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头。 ? 例如:要得到所有person记录的Uri为content://contacts/person, ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? 那么返回的MIME类型字符串为"vnd.android.cursor.dir/person"。

  • 如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头。 ? ? ?

? ? ? ? ? 例如:要得到id为10的person记录的Uri为content://contacts/person/10, ? ? ? ? ? ? ? ?

? ? ? ? ? ? ? ? ? ? ? ?那么返回的MIME类型字符串应为"vnd.android.cursor.item/person"

使用详解-ContentProvider类

  • 介绍:ContentProvider主要以表格的形式组织数据,同时也支持文件数据。 每个表格中包含多张表,每张表包含行和列,分别对应记录和字段。 ContentProvider类并不会直接与外部进程交互,而是通过ContentResolver 类与外部交互。
  • ContentProvider主要方法介绍如下表所示:

使用详解-ContentResolver类

介绍:

  1. ContentResolver通过URI即可操作 不同的ContentProvider 中的数据,统一管理不同 ContentProvider间的操作。
  2. 外部进程通过 ContentResolver类从而与ContentProvider类进行交互。
  3. 通过调用Content的 getContentResolver() 方法获取 ContentResolver对象实例, 其实ContentResolver的作用类似于HttpClient,获取对象后就可以根据Uri对应用的数 据进行CRUD操作了。
  4. ContentResolver 类提供了与ContentProvider类相同名字与作用的4个方法。

为什么要使用通过ContentResolver类从而与ContentProvider类进行交互,而不直接访问ContentProvider类?

一款应用要使用多个ContentProvider,若需要了解每个ContentProvider的不同实现从而再完成数据交互,操作成本高 & 难度大, 所以再ContentProvider类上加多了一个 ContentResolver类对所有的ContentProvider进行统一管理。

ContentResolver、ContentProvider、URI关系图

?使用详解-辅助类

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-03 17:23:32  更:2021-08-03 17:23:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 0:26:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码