Android这个系统和其他的操作系统还不太一样,我们需要记住的是,数据在Android当中是私有的,当然这些数据包括文件数据和数据库数据以及一些其他类型的数据。那这个时候有读者就会提出问题,难道两个程序之间就没有办法对于数据进行交换?Android这么优秀的系统不会让这种情况发生的。解决这个问题主要靠ContentProvider。一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,当然,中间也会涉及一些权限的问题。

在Content Provider中使用的查询字符串有别于标准的SQL查询。很多诸如select, add, delete, modify等操作我们都使用一种特殊的URI来进行,这种URI由3个部分组成, “content://”, 代表数据的路径,和一个可选的标识数据的ID。

Android数据存储方案ContentProvider存储数据_第1张图片

Android数据存储方案ContentProvider存储数据_第2张图片

Android数据存储方案ContentProvider存储数据_第3张图片

创建Content Provider:  
至此我们已经知道如何使用Content Provider了,现在让我们来看下如何自己创建一个Content Provider。
要创建我们自己的Content Provider的话,我们需要遵循以下几步:
1. 创建一个继承了ContentProvider父类的类
2. 定义一个名为CONTENT_URI,并且是public static final的Uri类型的类变量,你必须为其指定一个唯一的字符串值,最好的方案是以类的全名称,
如: public static final Uri CONTENT_URI = Uri.parse( “content://com.google.android.MyContentProvider”);
3. 创建你的数据存储系统。大多数Content Provider使用Android文件系统或SQLite数据库来保持数据,但是你也可以以任何你想要的方式来存储。
4. 定义你要返回给客户端的数据列名。如果你正在使用Android数据库,则数据列的使用方式就和你以往所熟悉的其他数据库一样。但是,你必须为其定义一个叫_id的列,它用来表示每条记录的唯一性。
5. 如果你要存储字节型数据,比如位图文件等,那保存该数据的数据列其实是一个表示实际保存文件的URI字符串,客户端通过它来读取对应的文件数据,处理这种数据类型的Content Provider需要实现一个名为_data的字段,_data字段列出了该文件在Android文件系统上的精确路径。这个字段不仅是供客户端使用,而且也可以供ContentResolver使用。客户端可以调用ContentResolver.openOutputStream()方法来处理该URI指向的文件资源,如果是ContentResolver本身的话,由于其持有的权限比客户端要高,所以它能直接访问该数据文件。
6. 声明public static String型的变量,用于指定要从游标处返回的数据列。
7. 查询返回一个Cursor类型的对象。所有执行写操作的方法如insert(), update() 以及delete()都将被监听。我们可以通过使用ContentResover().notifyChange()方法来通知监听器关于数据更新的信息。
8. 在AndroidMenifest.xml中使用标签来设置Content Provider。
9. 如果你要处理的数据类型是一种比较新的类型,你就必须先定义一个新的MIME类型,以供ContentProvider.geType(url)来返回。



更多相关文章

  1. android之文件上传
  2. Flutter 解决webview_flutter 插件Android端无法上传文件问题
  3. Android贝壳单词客户端应用源码
  4. android中共享全局数据的方法
  5. Django服务器与App(Android)客户端的简单实现
  6. APPS大乱斗:4大Android文件浏览器横评(一)
  7. android的5种数据存储方式
  8. 如何在 iOS、Android、macOS、Windows 之间快速文件互传?

随机推荐

  1. Android引导程序开发要点
  2. 【资源汇总分享】Android开发资源汇总之
  3. Android activity-alias 多入口配置
  4. android logcat用法总结
  5. 【Android】实现登录、注册、数据库操作(
  6. android中的ANR
  7. 简单学习Android TextView
  8. android软键盘的隐藏以及Edittext的焦点
  9. 状态开关按钮ToggleButton和开关switch的
  10. LeadTools Android 入门教学——运行第一