一、理解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. MySQL数据库自带备份与恢复工具:MySQLdump.exe与mysql.exe

    数据库的备份工作是保护数据库正常运行的关键,以下的文章主要讲述的是MySQL数据库备份的一些小妙招,我们大家都知道使用MySQL dump备份数据库的用户所需要的权限相对而言还是比较小的,只需要sel ...

  2. Codeforces Round #198 (Div. 1) D. Iahub and Xors 二维树状数组*

    D. Iahub and Xors   Iahub does not like background stories, so he'll tell you exactly what this prob ...

  3. Arduino101学习笔记(八)—— 函数库

    /*********最小值*********/ min() //实现:#define min(a,b) ((a)<(b)?(a):(b)) /*********最大值*********/ max ...

  4. Arduino101学习笔记(七)—— 时间API

    1.毫秒时间 获取机器运行的时间长度, 单位毫秒. 系统最长的记录时间为9小时22分, 如果超出时间将从0开始. 警告: 时间为 unsigned long类型, 如果用 int 保存时间将得到错误结 ...

  5. sql篇,动态合并数据

    背景: 为何说是一雪前耻呢,想当年,我还小,我出去面试远洋,远远地看着浩哥在那里坐着,然后下班去吃饭,我和东辉却在那里静静地等待着第二轮的技术面试(结果是没有面上,一个是学历问题),终于一个小个子姐姐 ...

  6. 安装Maven、Eclipse设置、添加地址JAR

    1.下载Maven 地址:http://maven.apache.org/download.cgi 2.安装Maven 系统变量:MAVEN_HOME = D:\maven\apache-maven- ...

  7. 关于DOM

    前言 DOM的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容).浏览器会根据DOM模型,将HTML文档解析成一系列的节点,再由这些节点组 ...

  8. http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html

    http://www.cnblogs.com/younggun/archive/2013/07/16/3193800.html

  9. Redis执行Lua脚本示例

    Redis在2.6推出了脚本功能,允许开发者使用Lua语言编写脚本传到Redis中执行.使用脚本的好处如下: 1.减少网络开销:本来5次网络请求的操作,可以用一个请求完成,原先5次请求的逻辑放在red ...

  10. HDU5461 Largest Point(暴力)

    这题第一眼就想到暴力.. 枚举每一个ti,就能确定tj,tj一定是剩下数最大或最小的.为了求tj就要求出数列最大最小次大次小.时间复杂度O(n). 感觉暴力挺有趣的. #include<cstd ...