一、理解ContentProvider

  为了在应用程序之间交换数据,Android提供了ContentProvider,它是不同应用程序之间进行数据交换的标准API,当一个应用程序需要把自己的数据暴露给其他应用程序时,该应用就可以通过ContentProvider实现;其它应用程序就可以通过ContentResolver来操作ContentProvider暴露的数据。一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口,那么不管该应用程序是否启动,其它应用程序都可以该接口来操作该应用程序内部的数据; ContentProvider也是Android应用四大组件之一,需要在AndroidManifest.xml文件中进行配置。

  ContentProvider以某种Uri的形式对外提供数据,允许其他应用访问或修改数据;其他应用程序使用ContentResolver根据Uri去访问操作指定数据据;也就是说Uri是ContentProvider和ContentResolver进行数据交换的标识。

   1、 Uri可分成如下三个部分:

       content://org.crazyit.providers.dictprovider/words

      content://   --- 类似上网协议默认是http://,暴露ContentProvider、访问ContentProvider的协议默认是content://;

      org.crazyit.providers.dictprovider --- ContentProvider的authorities,系统根据这个部分来找到操作哪个ContentProvider;

         words    --- 数据部分,当访问者需要访问不同资源时,这个部分是动态改变的。

   2、 被支持的Uri形式:

      content://org.crazyit.providers.dictprovider/word/2  (访问word数据中ID为2的记录)

      content://org.crazyit.providers.dictprovider/word/2/word  (访问word数据中ID为2的记录的word字段)

      content://org.crazyit.providers.dictprovider/words  (访问全部数据)

   3、   大部分使用ContentProvider所操作的数据来自数据库,有时候也可来自文件、XML、网络等其它存储方式,此时Uri也可以改为如下形式:

        content://org.crazyit.providers.dictprovider/word/detail/  (操作word节点下的detail节点)

    4、字符串转换成Uri

      Uri工具类提供了静态方法parse()可将一个字符串转换成Uri

二、ContentProvider简介

  1、开发ContentProvider步骤:

    (1)定义自己的ContentProvider类,该类需要继承Android提供的ContentProvider基类;

    (2)在AndroidManifest.xml 文件中注册该ContentProvider,注册时需要为其绑定一个Uri;

    (3)提供如下六个方法:

      1>public boolean onCreate()

        该方法在ContentProvider创建后会被调用,其他应用程序第一次访问ContentProvider时,该ContentProvider会被创建出来,并立即回调onCreate()方法。

      2>public Uri insert(Uri uri,ContentValues values)

        跟据Uri插入values对应的数据。

      3>public int delete(Uri uri,String selection,String[] selectionArgs)

        跟据Uri删除selection条件所匹配的全部记录。

      4>public int update(Uri uri,ContentValues values,String selection,String[] selectionArgs)

        根据Uri修改selection条件所匹配全部记录。

      5>public Cursor query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder)

        根据Uri查询出selection条件所匹配的全部记录,projection指定列名。

      6>public String getType(Uri uri)

        该方法用于返回当前Uri代表的数据的MIME类型,如果该Uri对应的数据可能包括多条记录,那么MIME类型字符串应该以 vnd.android.cursor.dir/ 开头,如果该Uri对应的数据只包含一条记录,那么MIME类型字符串应该以 vnd.android.cursor.item/ 开头。

三、使用ContentResolver操作数据

  1、应用程序提供ContentResolver来操作ContentProvider所暴露的数据;

  2、Context提供了getContentResolver()来获取ContentResolver对象,获取ContentResolver对象后就可以调用ContentResolver的如下方法来操作其他应用程序的数据了:

    (1)insert(Uri uri,ContentValues values) 向Uri的ContentProvider中插入values对应的数据;

    (2)delete(Uri uri,String where,String[] selectionArgs) 删除Uri对应的ContentProvider中where提交的数据;

    (3)update(Uri uri,ContentValues values,String where,String[] selectionArgs) 更新Uri对应的ContentProvider中where提交匹配的数据;

    (4)query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder) 查询Uri对应的ContentProvider中where提交匹配的数据。

android-ContentProvider的更多相关文章

  1. Android基础 : Android ContentProvider

    Android 应用程序通过ContentProvider实现方式统一的数据共享功能. 外界的程序通过ContentResolver接口可以访问ContentProvider提供的数据,在Activi ...

  2. Android ContentProvider完整案例

    ContentData类,提供数据常量: /** * 提供ContentProvider对外的各种常量,当外部数据需要访问的时候,就可以参考这些常量操作数据. * @author HB * */ pu ...

  3. Android ContentProvider基本用法

    转自:https://www.jianshu.com/p/601086916c8f 一.基本概念 ContentProvider是Android系统中提供的专门用户不同应用间进行数据共享的组件,提供了 ...

  4. Android ContentProvider 启动分析

    对于 ContentProvider 还不是很熟悉的同学,可以阅读上一篇 Android ContentProvider 基本原理和使用详解.本文主要是对 contentProvider 的源码进行分 ...

  5. Android ContentProvider介绍

    在Android中数据的存储一共有五种形式,分别是:Shared Preferences.网络存储.文件存储,外储存储.SQLite.但是我们知道一般这些存储都只是在单独的一个应用程序之中达到一个数据 ...

  6. Android ContentProvider 简单学习

    当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.以前我们学习过文件的操作模式,通过指定文件的操作模式为Context.MODE_WORL ...

  7. Android ContentProvider的实现

    当Android中的应用需要访问其他应用的数据时,用ContentProvider可以很好的解决这个问题.今天介绍一下ContentProvider的用法. 首先开发ContentProvider有两 ...

  8. Android ContentProvider和Uri详解 (绝对全面)

        ContentProvider的基本概念 : 1.ContentProvider为存储和读取数据提供了统一的接口 2.使用ContentProvider,应用程序可以实现数据共享 3.andr ...

  9. Android ContentProvider和getContentResolver

    安卓系统中的数据库SqlLite操作和java中mysql的数据库操作很不一样,造成这样的原因是因为在安卓中数据库是属于进程的不存在数据库客户端,也不存在数据库服务器. 关于SqlLite数据库的文章 ...

  10. android ContentProvider学习

    1.ContentProvider提供位存储或获取数据提供了统一的接口. 2.使用ContentProvider可以在不同的应用程序之间共享数据. 3.Android为常见的一些数据提供了Conten ...

随机推荐

  1. [荐]使用jQuery清空file文件域

    file是文本域,我们一般都会使用它来上传文件,在上传文件时我们需要验证,验证完成后,如果存在错误,为了防止将错误信息也上传上去,我们总是希望能够将其清空.但是在IE中,为了安全起见它是不允许我们改变 ...

  2. OpenCv实现两幅图像的拼接

    直接贴上源码 来源:http://www.myexception.cn/image/1498389.html 实验效果 Left.jpg right.jpg ImageMatch.jpg #inclu ...

  3. 为什么要使用 Node.js

    这是一个移动端工程师涉足前端和后端开发的学习笔记,如有错误或理解不到位的地方,万望指正. Node.js 是什么 传统意义上的 JavaScript 运行在浏览器上,这是因为浏览器内核实际上分为两个部 ...

  4. 枚举PEB获取进程模块列表

    枚举进程模块的方法有很多种,常见的有枚举PEB和内存搜索法,今天,先来看看实现起来最简单的枚举PEB实现获取进程模块列表. 首先,惯例是各种繁琐的结构体定义.需要包含 ntifs.h 和 WinDef ...

  5. SQLServer 维护脚本分享(11)部分DBCC及系统存储过程

    --DBCC命令与用法 DBCC HELP('?') DBCC HELP('useroptions') DBCC USEROPTIONS WITH NO_INFOMSGS --当前DB的区及文件 DB ...

  6. Android HttpClient post MultipartEntity - Android 上传文件

    转自[http://blog.csdn.net/hellohaifei/article/details/9707089] 在Android 中使用HttpClient,MultipartEntity ...

  7. 并查集(图论) LA 3644 X-Plosives

    题目传送门 题意:训练指南P191 分析:本题特殊,n个物品,n种元素则会爆炸,可以转移到图论里的n个点,连一条边表示u,v元素放在一起,如果不出现环,一定是n点,n-1条边,所以如果两个元素在同一个 ...

  8. js中typeof与instanceof区别

    今天写JS代码,遇到动态生成多个名称相同的input复选按钮 需要判断其是否是数组,用到了if (typeof(document.MapCheckMgr.checkid)!="undefin ...

  9. 通过反射将变量值转为变量名本身ZZ

      这是.NET反射的一个有趣小例子:  通过反射将变量值转为变量名本身. 当然要先添加命名空间:using System.Reflection; 示例代码如下: class Program { st ...

  10. 编程思想┊从实例谈面向对象编程(OOP)、工厂模式和重构

    有了翅膀才能飞,欠缺灵活的代码就象冻坏了翅膀的鸟儿.不能飞翔,就少了几许灵动的气韵.我们需要给代码带去温暖的阳光,让僵冷的翅膀重新飞起来.结合实例,通过应用OOP.设计模式和重构,你会看到代码是怎样一 ...