Android:ContentProvider
2015-09-08 11:07
489 查看
参考博客:/article/1363533.html
ContentProvider两个重要的作用:
1、访问数据的统一接口
2、让数据在不同的应用程序之间共享
(即可以将ContentProvider简单理解成应用程序将自己要共享的数据放到ContentProvider中,其它应用程序可以通过ContentProvider访问里面的共享数据)
ContentProvider的相关背景
1、Android中对应用程序中资源的管理是参考Linux的文件管理的,即文件的所有者、所有者所在的用户组、其它组都定义了对该文件的访问权限
2、ContentProvider的应用有:我们开发的app想使用通讯录中的联系人 + 新浪开放平台、QQ开放平台提供数据给第三方使用
ContentProvider如何实现应用程序之间的数据共享和数据访问的统一接口:
1、ContentProvider的实现架构图:
(APP通过应用程序中ContentProvider的唯一Uri访问应用程序的共享数据,通过腹泻ContentProvider提供的方法(增、删、改、查)操作数据)
2、ContentProvider如何实现应用程序之间的数据共享和数据访问的统一接口
总之是:Binder进程间通信机制和匿名共享内存机制结合
3、应用程序访问ContentProvider中的共享数据遇到的两个问题:一方面是这些APP没有权限读取这些数据文件,另一外面是Content Provider和这些APP是在不同的进程空间里面。
4、如何解决的呢:虽然一个应用程序不能直接读取另一个应用程序的数据,但是它却可以通过Builder进程间通信方式来请求另一个这个应用程序给它传输数据。并且数据共享的方式并不是通过Builder进程之间简单的传递消息,因为ContentProvider要传递的消息可能会会很有,这里采用的方式是将共享的数据放到Android系统匿名共享内存里面,然后才通过Builder进程通信机制从里面获取数据。
ContentProvider的实现:以ContentProvider的形式提供访问入口 + 通过ContentProvider访问共享的数据
1、URI:一个ContentProvider都有唯一的一个URI标识,其它应用程序就是通过这个URI来访问ContentProvider提供的特定共享数据。一个URI就唯一的标识了一个资源的MIME类型提供的特定数据
即[模式] + [标识ContentProvider的唯一标识:包名 + 类名] + [ContentProvider提供的资源类型(ContentProvider可以提供多种资源)] + [所提供资源的特定数据(例如表中的哪一行数据)]
2、URIMatcher:
ContentProvider提供的三种共享数据类型:
content://shy.luo.providers.articles/item表示访问所有的文章信息条目;content://shy.luo.providers.articles/item/123表示只访问ID值为123的文章信息条目;content://shy.luo.providers.articles/pos/1表示访问数据库表中的第1条文章信息条目
分别为这三种数据类型定义相应的URI匹配器;不同的uri对应的query、insert、delete、update都不一样。
3、insert、delete以及update这些操作都会引起数据库表的更新, 所以这时候要通过调用ContentResolver接口的notifyChange函数来通知数据源发生了改变。
4、AndroidMainFest配置:authorities的配置,第三方应用程序就是通过这个authorities属性来找到ContentProvider提供的数据的
5、通过ContentResolver接口调用ContentProvider中方的query、delete、insert、update方法
ContentProvider为数据存储和获取数据提供了统一的接口。
这样理解:Android中数据存储的方式有很多,譬如说文件啊、SQLite啊。ContentProvider将自己存储的数据进行了封装,用户要访问数据的时候直接调用接口即可访问,而不用关心存储的细节,譬如说手机中联系人的数据。
使用ContentProvider实现不同应用程序之间的数据共享。
即默认情况下一个应用程序只能访问自己的数据,而使用ContentProvider即可向其它应用程序暴露自己的数据,实现不同应用程序之间的数据共享。
Android为常见的数据提供了默认的ContentProvider(例如音频啊、视频啊、图片啊和通讯录啊)
即直接调用ContentProvider就能访问这些数据了。
ContentProvider的数据存储模型:就是一张表
即Android中所有的数据都有其对应的ContentProvider,而每一种数据的ContentProvider本质就是一张表。那么问题来了,怎么找到特定数据对应的ContentProvider呢?即Uri。
Uri
每一个ContentProvider都有自己唯一的一个Uri(是一个常亮),这个Uri即表示ContentProvider所提供的数据
android.provider包
ContentProvider的实现方法
ContentProvider所提供的函数:
ContentProvider的实现步骤(开发过程中,自己实现ContentProvider是不常见,只是这里实现以下好让我们更了解ContentProvider的实现方式,能更好的使用内置的ContentProvider),步骤为:
1、定义一个CONTENT_URI常量
例如:uri的定义:
2、定义一个类,继承ContentProvider
3、实现query() + insert() + update() + delete() + getType(根据uri返回该uri所表示的数据类型,即2/3) + onCreate()方法,这些方法即为对数据库的操作
4、在AndroidMainfest中声明
(authorities:为类名的全称)
ContentProvider两个重要的作用:
1、访问数据的统一接口
2、让数据在不同的应用程序之间共享
(即可以将ContentProvider简单理解成应用程序将自己要共享的数据放到ContentProvider中,其它应用程序可以通过ContentProvider访问里面的共享数据)
ContentProvider的相关背景
1、Android中对应用程序中资源的管理是参考Linux的文件管理的,即文件的所有者、所有者所在的用户组、其它组都定义了对该文件的访问权限
2、ContentProvider的应用有:我们开发的app想使用通讯录中的联系人 + 新浪开放平台、QQ开放平台提供数据给第三方使用
ContentProvider如何实现应用程序之间的数据共享和数据访问的统一接口:
1、ContentProvider的实现架构图:
(APP通过应用程序中ContentProvider的唯一Uri访问应用程序的共享数据,通过腹泻ContentProvider提供的方法(增、删、改、查)操作数据)
2、ContentProvider如何实现应用程序之间的数据共享和数据访问的统一接口
总之是:Binder进程间通信机制和匿名共享内存机制结合
3、应用程序访问ContentProvider中的共享数据遇到的两个问题:一方面是这些APP没有权限读取这些数据文件,另一外面是Content Provider和这些APP是在不同的进程空间里面。
4、如何解决的呢:虽然一个应用程序不能直接读取另一个应用程序的数据,但是它却可以通过Builder进程间通信方式来请求另一个这个应用程序给它传输数据。并且数据共享的方式并不是通过Builder进程之间简单的传递消息,因为ContentProvider要传递的消息可能会会很有,这里采用的方式是将共享的数据放到Android系统匿名共享内存里面,然后才通过Builder进程通信机制从里面获取数据。
ContentProvider的实现:以ContentProvider的形式提供访问入口 + 通过ContentProvider访问共享的数据
1、URI:一个ContentProvider都有唯一的一个URI标识,其它应用程序就是通过这个URI来访问ContentProvider提供的特定共享数据。一个URI就唯一的标识了一个资源的MIME类型提供的特定数据
即[模式] + [标识ContentProvider的唯一标识:包名 + 类名] + [ContentProvider提供的资源类型(ContentProvider可以提供多种资源)] + [所提供资源的特定数据(例如表中的哪一行数据)]
2、URIMatcher:
ContentProvider提供的三种共享数据类型:
content://shy.luo.providers.articles/item表示访问所有的文章信息条目;content://shy.luo.providers.articles/item/123表示只访问ID值为123的文章信息条目;content://shy.luo.providers.articles/pos/1表示访问数据库表中的第1条文章信息条目
分别为这三种数据类型定义相应的URI匹配器;不同的uri对应的query、insert、delete、update都不一样。
3、insert、delete以及update这些操作都会引起数据库表的更新, 所以这时候要通过调用ContentResolver接口的notifyChange函数来通知数据源发生了改变。
4、AndroidMainFest配置:authorities的配置,第三方应用程序就是通过这个authorities属性来找到ContentProvider提供的数据的
5、通过ContentResolver接口调用ContentProvider中方的query、delete、insert、update方法
ContentProvider的基本概念
ContentProvider的基本概念ContentProvider为数据存储和获取数据提供了统一的接口。
这样理解:Android中数据存储的方式有很多,譬如说文件啊、SQLite啊。ContentProvider将自己存储的数据进行了封装,用户要访问数据的时候直接调用接口即可访问,而不用关心存储的细节,譬如说手机中联系人的数据。
使用ContentProvider实现不同应用程序之间的数据共享。
即默认情况下一个应用程序只能访问自己的数据,而使用ContentProvider即可向其它应用程序暴露自己的数据,实现不同应用程序之间的数据共享。
Android为常见的数据提供了默认的ContentProvider(例如音频啊、视频啊、图片啊和通讯录啊)
即直接调用ContentProvider就能访问这些数据了。
ContentProvider的数据存储模型:就是一张表
即Android中所有的数据都有其对应的ContentProvider,而每一种数据的ContentProvider本质就是一张表。那么问题来了,怎么找到特定数据对应的ContentProvider呢?即Uri。
Uri
每一个ContentProvider都有自己唯一的一个Uri(是一个常亮),这个Uri即表示ContentProvider所提供的数据
android.provider包
ContentProvider的实现方法
ContentProvider所提供的函数:
query() + insert() + update() + delete() + getType(得到数据类型) + onCreate()
ContentProvider的实现步骤(开发过程中,自己实现ContentProvider是不常见,只是这里实现以下好让我们更了解ContentProvider的实现方式,能更好的使用内置的ContentProvider),步骤为:
1、定义一个CONTENT_URI常量
例如:uri的定义:
1、//(如果一个ContentProvider中包含了多个子表,则对这些子表都要定义uricontent://com.dengqi.ContentProviderProject.ContentProviderText(类名)/subTable1) 2、访问该ContentProvider所返回的数据类型定义(整张表的数据类型) vnd.android.curosr.dir/vnd.firstprovider.user 3、访问该ContentProvider所返回的数据类型定义(表中某一个item的数据类型定义) vnd.android.curosr.item/vnd.firstprovider.user
2、定义一个类,继承ContentProvider
3、实现query() + insert() + update() + delete() + getType(根据uri返回该uri所表示的数据类型,即2/3) + onCreate()方法,这些方法即为对数据库的操作
例如:插入 // ContentValue为键值对,键为表字段名称、值为属性;返回值为代表插入列的uri对象 public Uri insert(Uri uri, ContentValues values) 插入的调用: // ContentValues values = new ContentValues(); values.put(列名, 值) Uri uri = getContentResolver().insert(整张表对应的数据类型对应的uri, values )
4、在AndroidMainfest中声明
(authorities:为类名的全称)
相关文章推荐
- (十)android项目中,通用布局的对话框的实现。
- android ndk 编译错误
- adb logcat命令查看并过滤android输出log
- 【笔记】Android开发中R文件丢失的解决方法
- Android apk动态加载机制的研究
- Android Studio中创建Kotlin For Android项目
- Android Studio中创建Kotlin For Android项目
- game测试:(android项目设计师角色)01立项: 框架设计,详细设计
- android接入支持海外的支付,visa,mastercard
- android 图片裁减
- Android工具代码
- Parcelable接口
- android菜鸟进阶之路—— AsyncTask的使用
- Android FTP ftpClient.listFiles()报java.lang.ClassNotFoundException: Didn't find class "Windows_NT"
- Android学习笔记之:NDK开发环境配置
- Android 签名机制
- android:inputType罗列
- Android控件使用—EditText的一些注意事项
- Android layout 属性
- (九)android中通过selector设置TextView的文字选中和正常时候的颜色