10.Android学习之数据存储技术(四)

使用Content Provider实现数据共享
摘要由CSDN通过智能技术生成

目录

10.数据存储技术(四)

4.使用Content Provider实现数据共享

4-1.Content Provider概述

4-2.创建Content Provider

4-3使用Content Provider

5.难点解答

5-1.内部存储与外部存储的区别

5-2.SharedPreferences 存储与文件存储的区别


10.数据存储技术(四)

4.使用Content Provider实现数据共享

Content Provider 主要用于在不同的应用程序之间实现数据共享。它提供了一套完整的机制, 允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。

在Android程序中,共享数据的实现需要继承ContentProvider基类,该基类为其他应用程序使用和存储数据实现了一套标准方法,然而应用程序并不直接调用这些方法,而是使用一个ContentResolver对象去操作指定数据。

4-1.Content Provider概述

Content Provider内部如何保存数据由其设计者决定,但是所有的Content Provider都实现一组通用的方法,用来提供数据的增、删、改、查功能。

客户端通常不会直接使用这些方法,而是通过ContentResolver对象实现对Content Provider的操作。开发人员可以通过调用Activity或者其他应用程序组件的实现类中的getContentResolver()方法来获得ContentResolver对象,例如:

ContentResolver cr = getContentResolver();

使用ConentResover提供的方法可以获得Content Provider 中任何想要的数据。

当开始查询时,Android 系统确认查询的目标Conent Provider 并确保它正在运行。系统会初始化所有ContentProvider类的对象,开发人员不必完成此类操作,实际上,开发人员根本不会直接使用ContentProvider类的对象。通常,每个类型的Content Provider仅有一个单独的实例。但是该实例能与位于不同应用程序和进程的多个ContentResolver类的对象通信。不同进程之间的通信由ContentProvider类和ContentResolver类处理。

使用Content Provider时,通常会用到以下两个概念。

1.数据模型

Content Provider使用基于数据库模型的简单表格来提供其中的数据,这里每行代表一条记录, 每列代表特定类型和含义的数据。例如,联系人的信息可能以表10.2 所示的方式提供。

表10.2 联系方式

_ID NAME NUMBER EMAIL
001 张XX 123*** 123**@163.com
002 王XX 132*** 132**@google.com

每条记录包含一个数值型的_ID字段,用于在表格中唯一标识该记录。 _ID 能用于匹配相关表格中的记录,例如,在一个表格中查询联系人的电话,在另一表格中查询其照片。

注: _ID 字段前还包含了一条下划线,在编写代码时不要忘记。

查询返回一个Cursor对象,它能遍历各行各列来读取各个字段的值。对于各个类型的数据,它都提供了专用的方法。因此,为了读取字段的数据,开发人员必须知道当前字段包含的数据类型。

2.URI的用法

每个Content Provider提供公共的URI(使用Uri类包装)来唯一标识其数据集。 管理多个数据集(多个表格)的Content Provider 为每个数据集提供了单独的URI。所有为Content Provider提供的URI都以“content://”作为前缀,它表示数据由Content Provider来管理。

如果自定义Content Provider,则需要为其URI也定义一个常量,来简化客户端代码并让日后更新更加简洁。Android为当前平台提供的Content Provider定义了CONTENT_URI常量。例如,匹配电话号码到联系人表格的URI和匹配保存联系人照片表格的URI分别如下:

android.provider.Contacts.Phones.CONTENT_URI
android.provider.Contacts.Photos.CONTENT_URI

URI常量用于所有与Contlenr Povider的交互中。每个ContentResolver方法使用URI作为其第一个参数。它标识ContentResolver应该使用哪个Content Provider及其中的哪个表格。

例:

content://com.example.employeeprovider/person/001

◆content://:标准的前缀,用于标识该数据由Content Provider管理,不需修改。

◆com.example.employeeprovider:URI的权限(authority) 部分,用于对不同的应用程序做区分,一 股会采用完整的类名(使用小写形式)来保证其唯一性。例如,一个包名为com.example的应用,对应的权限就可以命名为com.example.provider。

◆/person/001:Content Provider的路径(path)部分,用于指定要操作的数据,可以是数据表、文件、XML等。例如,要访问数据表person中的所有记录,可以使用“/person" ;而要访问person中的ID为001的记录的name字段,则需要使用“/person/001/name'

◆/001:被请求的特定记

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值