前言:

  文件数据、数据库数据以及一些其它类型的数据在android中都是私有的,在android中,并没有提供所有应用共同访问的公共储存区域。但各应用程序间通常需要进行数据共享,如联系人信息等。

  在android中,应用程序可以实现Content Provider的抽象接口从而将自己的数据暴露出去。Content Provider拥有一套通用的方法来实现对数据的增、删、改、查功能。但通常情况下我们都是使用系统内置的Content Provider,自己实现并不常见。

  当数据在一个应用程序中被暴露出来后,外界可以通过Content Resolver提供的一套标准方法对数据进行增、删、改、查操作。

Content Provider类:

  1.Content Provider为储存数据提供了统一的接口,利用表的形式进行数据储存:

  2.android为常见的一些数据提供了默认的Content Provider,如声音、视频、图像等。

Content Resolver类:

  外界程序通过实现Content Resolver的接口可以访问Content Provider提供的数据。在Activity中,可以通过getContentResolver()获得当前应用的Content Resolver实例。Content Resolver的一些常用接口如下:

  增:inser(Uri uri,ContentValues values) ---将数据插入到uri所指定的位置;

  删:delete(Uri uri,String where,String[] selectionArgs)---删除指定uri并符合指定条件的数据;

  改:update(Uri uri,ContentValues values,String where,String[] selectionArgs)---更改uri指定并符合指定条件的数据;

  查:query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder)---查询uri指定并符合指定条件的数据,并返回Cursor对象。其中第二个参数为:应返回的列名称;第三个参数为:哪些行被返回的过滤器。

private String getdata() {// TODO Auto-generated method stubStringBuilder sb=new StringBuilder();//StringBuilder一个可变的字符序列ContentResolver resolver=getContentResolver();//获得ContentResolver对象Cursor cursor=resolver.query(Contacts.CONTENT_URI, null, null, null, null);//调用query进行查询int inIndex=cursor.getColumnIndex(columns[0]);//获得ID纪录的列索引int nameIndex=cursor.getColumnIndex(columns[1]);while(cursor.moveToNext()){int id=cursor.getInt(inIndex);//取得idString name=cursor.getString(nameIndex);Cursor phone=resolver.query(Phone.CONTENT_URI, null, columns[3]+"="+id, null, null);//查询数据while(phone.moveToNext()){int phoneIndex=phone.getColumnIndex(columns[2]);String phoneNumber=phone.getString(phoneIndex);sb.append(id+":"+name+phoneNumber+"\n");//将字符添加到生成器(StringBuilder)
            }        }cursor.close();return sb.toString();}

URI:

  URI---统一资源标识符:为系统的每个资源配一个名字如联系人、通话记录、未接来电等。

  每个Content Provider都拥有一个公共的URI,用于表示这个URI所提供的数据,标识着Content Resolver应该使用哪个provider以及其中的哪些表格。

  A:标准前缀:不用修改。

  B:URI标识:定义了是由哪个provider提供的数据。对于第三方应用,这部分应该是完整的类名(小写)。

  C:路径:指定被请求的数据类型,如若只有一种数据类型,也可以不指定该部分。

  D:特定记录的ID值,增加这部分,可以返回ID所指定的数据,否则返回全部。

  根据我自己的理解,将Content Provider与Content Resolver之间的关系绘制如下图:

转载于:https://www.cnblogs.com/dream550/p/3906447.html

基础篇:7.Content provider与Content Resolver实现数据共享相关推荐

  1. 安卓基础巩固(二):四大组件:Activity、Service、Broadcast、Content Provider

    文章目录 Activity 生命周期 onCreate和onStart的区别 onPause和onStop的区别 生命周期的变化 Activity的启动 Intent Bundle Activity携 ...

  2. Content Provider 基础 之URI

    Keywords: content provider, URI Content Provider这个东西在Android平台上是最常用的共享数据的方法(似乎应用程序之间共享数据也只有这种方法吧,待求证 ...

  3. Android四大组件之Content Provider

    Android四大组件之Content Provider 作者:白璐 日期:2020/2/24 文章目录 Android四大组件之Content Provider 概述 内容提供器(Content P ...

  4. Android学习羁绊之Content Provider

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

  5. android 组件(activity,service,content provider,broadcast receiver,intent)详解

    Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全.Android应用程序组件的主要类型有:活动(Activity),服务 ...

  6. Android Content Provider基础

    Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...

  7. Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储

    Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...

  8. (转载)Android content provider基础与使用

    android有一个独特之处就是,数据库只能被它的创建者所使用,其他的应用是不能访问到的,所以如果你想实现不同应用之间的数据共享,就不得不用content provider了. 在Android中,c ...

  9. Android应用程序组件Content Provider的共享数据更新通知机制分析

    在Android系统中,应用程序组件Content Provider为不同的应用程序实现数据共享提供了基础设施,它主要通过Binder进程间通信机制和匿名共享内存机制来实现的.关于数据共享的另一个 话 ...

最新文章

  1. YY的GCD 莫比乌斯反演
  2. 【模型调优】风控模型调优相关知识
  3. 终端主题_泛终端全渠道新模式中国移动5G泛智能终端渠道生态合作峰会开幕
  4. 关于sql的正则表达式
  5. python后端设计_Python后端设计模式
  6. Android中的GraphicBuffer同步机制-Fence
  7. 转,python的匿名函数lambda解释及用法
  8. 编写dll 关于declspec(dllexport)和declspec(dllimport)
  9. lopatkin俄大神精简中文系统Windows 7 Enterprise SP1 7601.23934 x86-x64 ZH-CN PIP
  10. android 浏览器抓包工具下载,WebSee app下载-WebSee抓包工具v1.2.1 安卓版-腾牛安卓网...
  11. java qq 邮箱发送错误以及端口号
  12. 菜鸟教程php在线编程器,菜鸟教程在线工具
  13. 【烈日炎炎战后端】JAVA多线程(11.2万字)
  14. 计算机科学与技术专业课程简介
  15. dev:dev fatal: HttpRequestException encountered. remote: Invalid username or password. fatal: Authen
  16. Excel运用: Excel的窗口冻结与拆分
  17. 未来网络什么样?新华三是这么说的
  18. 网页设计教程:从设计到制作过程
  19. 大数据时代之市场调研的必要性
  20. html5的download下载标签

热门文章

  1. ArrayList转Json的2个坑
  2. 服务器选哪个系统,服务器选择哪个操作系统
  3. gan 总结 数据增强_[NLP]聊一聊,预处理和数据增强技术
  4. python xmxl 无法启动_问题引发由于与GI相关的python脚本中的错误,Gnome终端无法启动...
  5. C++中.lib静态库、.dll动态库的生成及调用2
  6. calico跨主机ping不通_戳穿 Calico 的谎言
  7. 一台计算机有64,在同一台计算机上使用带有32位和64位Altium设计软件的数据库元件库...
  8. c 清除 html标签,13.4. 去除HTML的标签tag:htmlRemoveTag
  9. mysql数据类型符号位_MySQL数据类型
  10. node升级命令_Laravel Mix 4升级说明与“排坑儿”指南