基础篇:7.Content provider与Content Resolver实现数据共享
前言:
文件数据、数据库数据以及一些其它类型的数据在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实现数据共享相关推荐
- 安卓基础巩固(二):四大组件:Activity、Service、Broadcast、Content Provider
文章目录 Activity 生命周期 onCreate和onStart的区别 onPause和onStop的区别 生命周期的变化 Activity的启动 Intent Bundle Activity携 ...
- Content Provider 基础 之URI
Keywords: content provider, URI Content Provider这个东西在Android平台上是最常用的共享数据的方法(似乎应用程序之间共享数据也只有这种方法吧,待求证 ...
- Android四大组件之Content Provider
Android四大组件之Content Provider 作者:白璐 日期:2020/2/24 文章目录 Android四大组件之Content Provider 概述 内容提供器(Content P ...
- Android学习羁绊之Content Provider
Content Provider(内容提供器)主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访数据的安全性.目前,使用内容提 ...
- android 组件(activity,service,content provider,broadcast receiver,intent)详解
Android应用程序由若干个不同类型的组件组合而成,每一个组件具有其特定的安全保护设计方式,它们的安全直接影响到应用程序的安全.Android应用程序组件的主要类型有:活动(Activity),服务 ...
- Android Content Provider基础
Android Content Provider基础 Content Providers Content providers管理对一个结构化的数据集合的访问.它们封装了数据,并且提供了保护数据安全性的 ...
- Android基础知识(二十一):Android五大存储之文件存储、Content Provider存储和网络存储
Android基础知识(二十一):Android五大存储之文件存储.Content Provider存储和网络存储 一.Android存储--持久化技术 数据持久化是指将那些内存中的瞬时数据保存到存储 ...
- (转载)Android content provider基础与使用
android有一个独特之处就是,数据库只能被它的创建者所使用,其他的应用是不能访问到的,所以如果你想实现不同应用之间的数据共享,就不得不用content provider了. 在Android中,c ...
- Android应用程序组件Content Provider的共享数据更新通知机制分析
在Android系统中,应用程序组件Content Provider为不同的应用程序实现数据共享提供了基础设施,它主要通过Binder进程间通信机制和匿名共享内存机制来实现的.关于数据共享的另一个 话 ...
最新文章
- YY的GCD 莫比乌斯反演
- 【模型调优】风控模型调优相关知识
- 终端主题_泛终端全渠道新模式中国移动5G泛智能终端渠道生态合作峰会开幕
- 关于sql的正则表达式
- python后端设计_Python后端设计模式
- Android中的GraphicBuffer同步机制-Fence
- 转,python的匿名函数lambda解释及用法
- 编写dll 关于declspec(dllexport)和declspec(dllimport)
- lopatkin俄大神精简中文系统Windows 7 Enterprise SP1 7601.23934 x86-x64 ZH-CN PIP
- android 浏览器抓包工具下载,WebSee app下载-WebSee抓包工具v1.2.1 安卓版-腾牛安卓网...
- java qq 邮箱发送错误以及端口号
- 菜鸟教程php在线编程器,菜鸟教程在线工具
- 【烈日炎炎战后端】JAVA多线程(11.2万字)
- 计算机科学与技术专业课程简介
- dev:dev fatal: HttpRequestException encountered. remote: Invalid username or password. fatal: Authen
- Excel运用: Excel的窗口冻结与拆分
- 未来网络什么样?新华三是这么说的
- 网页设计教程:从设计到制作过程
- 大数据时代之市场调研的必要性
- html5的download下载标签
热门文章
- ArrayList转Json的2个坑
- 服务器选哪个系统,服务器选择哪个操作系统
- gan 总结 数据增强_[NLP]聊一聊,预处理和数据增强技术
- python xmxl 无法启动_问题引发由于与GI相关的python脚本中的错误,Gnome终端无法启动...
- C++中.lib静态库、.dll动态库的生成及调用2
- calico跨主机ping不通_戳穿 Calico 的谎言
- 一台计算机有64,在同一台计算机上使用带有32位和64位Altium设计软件的数据库元件库...
- c 清除 html标签,13.4. 去除HTML的标签tag:htmlRemoveTag
- mysql数据类型符号位_MySQL数据类型
- node升级命令_Laravel Mix 4升级说明与“排坑儿”指南