ContentProvider提供数据

在Android中,他的每个应用都是相互独立的,各自运行在自己的Dalvik虚拟机中,但现实使用中常常需要在多个应用之间进行数据交换,例如发短信需要获取联系人中的内容,QQ上传头像需要获取相册内容等等,Android为这种跨应用的数据交换提供了一个标准ContentProvider,用户实现自己的ContentProvider时,需要实现他规定的抽象方法:

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

         public Uri inert(Uri uri,ContentValues values):根据该Uri插入values对应的数据。

public int delete(Uri uri,String selection,String[] selectionArgs):根据Uri删除select条件所匹配的全部记录。

         public int update(Uri uri,ContentValues values ,String selection,String[] selectionArgs):根据Uri修改select条件所匹配的全部记录

public Cursor query(Uri uri ,String[] projection,String selection ,String[] selectionArgs,String sortOrder):根据Uri查询出select条件所匹配的全部记录,其中projection就是列明列表,表明只选择出指定的数据列。

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

什么是URI

上面每个方法都有一个Uri参数,那么Uri又是什么呢?

关于Uri的可以参考这两篇博文  http://www.cnblogs.com/gaojing/archive/2012/02/04/2413626.html

http://www.cnblogs.com/hust-ghtao/p/4724885.html

就以上面两个网址来说:

http://这个是URL的协议部分,只要通过http协议来访问网站,前面都是这个前缀。

www.cnblogs.com这个是域名,访问指定的网站,域名部分也是不变的

gaojing/archive/2012/02/04/2413626.htmlhust-ghtao/p/4724885.html这个就是网站资源部分,这个是动态改编的,访问者访问不同的资源,这个部分也会不同。

ContentProvider要求的Uri和URL类似,例如

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

content://这个是android的contentprovider规定的,就像http://一样,提供ContentProvider和访问ContentProvider的默认协议就是content://

org.crazyit.providers.dictprovider这个类似于网址,系统通过这个名字找到你要操作哪个ContentProvider。

words这个是资源部分,访问者访问不同的资源时候,这里也是动态改变的。

可以使用Uri的静态方法parse()将字符串转换成一个Uri。

ContentResolver访问使用

通常与ContentProvider结合使用的是ContentResolver,一个应用程序使用ContentProvider提供数据,另外一个应用程序使用ContentResolver来访问数据。

可以使用Context的getContentResolver()方法来获取ContentProvider对象

获得了ContentResolver对象之后,可以使用如下方法操作数据:

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

delete(Uri uri,String where,String[] selectionArgs):删除Uri对应的ContentProvider中where提交匹配的数据。

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

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

参数说明:

projection:要查询的列名

selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”

selectionArgs:对应与selection语句占位符的值,值在数组的位置与占位符在语句中的位置必须一致,否则就会有异常

sortOrder:相当于select语句order by关键字后面的 部分

一般来说,ContentProvider是单例模式,当多个应用程序通过ContentResolver来操作ContentProvider提供的数据时,ContentResolver调用的数据操作将会委托给同一个ContentProvider处理。

注册ContentProvider

在定义好ContentProvider之后,还需要在系统中注册这个ContentProvider,具体操作方法是在AndroidMainifest.xml文件中添加一个<provider>元素,需要注意的是,我们要设置这个元素的exported的值为true,表明这个ContentProvider可以向外部应用提供数据

Android笔记(五十四) Android四大组件之一——ContentProvider(一)的更多相关文章

  1. Android笔记二十四.Android基于回调的事件处理机制

        假设说事件监听机制是一种托付式的事件处理,那么回调机制则与之相反,对于基于回调的事件处理模型来说,事件源和事件监听器是统一的,或者说事件监听器全然消失了,当用户在GUI控件上激发某个事件时,控 ...

  2. Android笔记(六十四) android中的动画——补间动画(tweened animation)

    补间动画就是只需要定义动画开始和结束的位置,动画中间的变化由系统去补齐. 补间动画由一下四种方式: 1.AplhaAnimation——透明度动画效果 2.ScaleAnimation ——缩放动画效 ...

  3. Android笔记(十四) Android中的基本组件——按钮

    Android中的按钮主要包括Button和ImageButton两种,Button继承自TextView,而ImageButton继承自ImageView.Button生成的按钮上显示文字,而Ima ...

  4. Android学习(十四) Service组件

    一.定义 运行在后台,没有页面,不可见.优先级高于Activity,当系统内存不足时,会先释放一些Activity.注意,Service同样是运行在主线程中,不能做一些耗时操作.如果一定要做一些耗时的 ...

  5. Android笔记三十四.Service综合实例二

    综合实例2:client訪问远程Service服务 实现:通过一个button来获取远程Service的状态,并显示在两个文本框中. 思路:如果A应用须要与B应用进行通信,调用B应用中的getName ...

  6. Android笔记(七十四) 详解Intent

    我们最常使用Intent来实现Activity之间的转跳,最近做一个app用到从系统搜索图片的功能,使用到了intent的 setType 方法和 setAction 方法,网上搜索一番,发现实现转跳 ...

  7. Android笔记(六十六) android中的动画——XML文件定义属性动画

    除了直接在java代码中定义动画之外,还可以使用xml文件定义动画,以便重用. 如果想要使用XML来编写动画,首先要在res目录下面新建一个animator文件夹,所有属性动画的XML文件都应该存放在 ...

  8. Android笔记(十) Android中的布局——表格布局

    TableLayout运行我们使用表格的方式来排列控件,它的本质依然是线性布局.表格布局采用行.列的形式来管理控件,TableLayout并不需要明确的声明包含多少行多少列,而是通过添加TableRo ...

  9. Android之旅十四 android中的xml文件解析

    在我们做有关android项目的时候,肯定会涉及到对xml文件的解析操作.以下给大家介绍一下xml文件的解析.包括DOM.SAX.Pull以及曾经我们用到的DOM4J和JDOM: 要解析的XML文件: ...

  10. Android进阶(二十四)Android UI---界面开发推荐颜色

    Android UI---界面开发推荐颜色   在Android开发过程中,总要给app添加一些背景,个人认为使用纯色调便可以达到优雅的视觉效果. 补充一些常用的颜色值:colors.xml < ...

随机推荐

  1. 微信小程序开发——文本框种输入手机号,点击获取验证码无反应的处理方法

    异常描述: 如下图,输入手机号码之后,点击右侧的获取验证码,在开发工具是OK的,真机测试无反应: 页面编码跟H5差不多的,H5没出现这个问题,但是小程序就不一样了. 异常分析: 页面结构层面,为了方便 ...

  2. 使用协方差矩阵的特征向量PCA来处理数据降维

    取2维特征,方便图形展示 import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.data ...

  3. LeetCode_441. Arranging Coins

    441. Arranging Coins Easy You have a total of n coins that you want to form in a staircase shape, wh ...

  4. node 单例

    ScriptManager.getInstance = function () { if (_instance != null) { return _instance; } else { return ...

  5. Rufus软件

    Rufus软件(https://rufus.akeo.ie/)——制作启动盘必备,简易且开源.

  6. 【神经网络与深度学习】【计算机视觉】SPPNet-引入空间金字塔池化改进RCNN

    转自: https://zhuanlan.zhihu.com/p/24774302?refer=xiaoleimlnote 继续总结一下RCNN系列.上篇RCNN- 将CNN引入目标检测的开山之作 介 ...

  7. python jieba 词云

    #!/usr/bin/python # coding:utf-8 # 绘制一个<三体>全集词云 # pip install jieba # pip install matplotlib # ...

  8. linux中的文件权限chmod

    linux中的文件权限chmod ​ 还是GPU集群那点事儿,集群之间磁盘互相挂载,普通用户也可以操作/cu02_nfs./cu04_nfs文件夹,这就牵扯到权限的问题,去google发现所谓的777 ...

  9. Spring Boot之从Spring Framework装配掌握SpringBoot自动装配

    Spring Framework模式注解 模式注解是一种用于声明在应用中扮演“组件”角色的注解.如 Spring Framework 中的 @Repository 标注在任何类上 ,用于扮演仓储角色的 ...

  10. 使用Spring CROS解决项目中的跨域问题

    CROS(Cross-Origin Resource Sharing) 用于解决浏览器中跨域请求的问题.简单的Get请求可以使用JSONP来解决,而对于其它复杂的请求则需要后端应用的支持CROS.Sp ...