文档章节

使用ContentProvider

c
 chuiyuan
发布于 2014/04/24 13:56
字数 717
阅读 512
收藏 1
点赞 0
评论 0

一. 了解 ContentProvider 

1.   什么是ContentProvider 

    让开发者在多个应用中操作数据,如存储,修改删除 的唯一方式 ,一个ContentProvider 实现 了下面的接口。

ContentProvider.insert( Uri ,ContentValues )
ContentProvider.query (Uri ,String [] ,String ,String [], String )
ContentProvider.update(Uri .ConentValues .String ,String []);
ContentProvider.delete( Uri ,String .String );
ContentProvider.getType (Uri );

通过 这些接口,我们不用关心数据 的结构 。

2.   什么是URI

 UUniversal Resources Identifier,在安卓 中,URI有三个部分

(1)  "content://"  ,开头

(2)  数据路径

(3)  ID ,可选 ,如果 不写,所有 的数据 。

content://contacts/peopel

很多常用 的URI安卓 已经定义也常量 。

3.ContentResolver 

      ContentProvider将数据暴露给外面,然后我们用ContentResolve得到数据 。相当 于是一个数据 的消费者,我们用  getContentResolver来得到当前 应用的ContentResolver对象 。

    与ContentProvider一一对应,它有五个接口。

它们将以Cursor的形式返回结果 ,与数据 库相同。


二.  使用ContentProvider

    系统的一些 程序 ,如联系人,通话记录等,往往作为 ContentProvider向外提供 数据 ,我们可以用managedQuery()方法很方便查询相关数据 

1.联系人

三个步骤,我们在这里将Activity   extends ListActivity,重点突出ContentProvider的作用。

(1) 查询联系人,得到Cursor对象 

    managedQuery( Uri uri ,String [] projection ,String selection ,String [] selectionArgs ,String sortOrder)

projection: 要查询的数据 的属性。

(2)新建 一个Adapter

ListAdapter adapter = new SimpleCursorAdapter ( Context context ,int layout ,Cursor c ,String [] from ,int [] to );

(3) 设置Adapter 

  setListAdapter (adapter );

例子:

Cursor c = managedQuery(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
				null,null,null,null);
		
		ListAdapter adapter = new SimpleCursorAdapter (getApplicationContext(), 
				android.R.layout.simple_list_item_2, c, 
				new String [] {ContactsContract.Contacts.DISPLAY_NAME,
			ContactsContract.CommonDataKinds.Phone.NUMBER}, 
				new int [] {android.R.id.text1,android.R.id.text2});
		
		setListAdapter (adapter);

在ContactsContract中,我们可以找到所有Contacts的信息。

最后要注意,读取联系人时,要的权限 。

<uses-permission 
	    android:name="android.permission.READ_CONTACTS"></uses-permission>

2. 通话记录

和上面的相比 ,要改的是

Uri :CallLog.Calls.CONTENT_URI

还有两个属性: 号码,通话时间

如下:

Cursor c = managedQuery(CallLog.Calls.CONTENT_URI,
				null,null,null,null);
		
		ListAdapter adapter = new SimpleCursorAdapter (getApplicationContext(), 
				android.R.layout.simple_list_item_2, c, 
				new String [] {Calls.NUMBER,Calls.DURATION}, 
				new int [] {android.R.id.text1,android.R.id.text2});
		
		setListAdapter (adapter);

3. 多媒体信息

4. 书签


三 .使用ContentResolver 

    外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。 ContentResolver使用insert、delete、update、query方法,来操作数据。

1. 删除 数据 

首先,我们要得到ContentResolver 对象 

ContentResolver resolver = getContentResolver();

使用delete

ContentResolver.delete (Uri  uri   ,String where ,String [] selectionArgs );

如要删除 所有 的联系人:

resolver.delete( Data.CONTENT_URI  ,null ,null );

如果要删除 名字为WES的,如下 

resolver.delete (Data.CONTENT_URI ,StructuredName.DISPLAY_NAME +"=", new String [] {"WES"});


2. 查询数据 

与数据库类似 

ContentResolver.query (Uri  uri ,String [] projection ,String selection ,String [] SelectionArgs ,String sortOrder );

projection :要查询的属性。

如要查询所有人l,的信息。

resolver.query (ContactsContract.CommenDataKinds.Phone,CONTENT_URI , null ,null,null, null);


3. 更新数据

ContentResolver.update (Uri uri ,ContentValues values ,String where ,String [] selectionArgs );

如下例子:

values.put(StructruedName.DISPLAY_NAME ,"WES" );
resolver.update(Data.CONTENT_URI , values ,  StruacturedName.DISPLAY_NAME+ "=?", new String [] {"WES"});

4. 插入数据

这个 看起来很容易 ,但是实际 上很难。

ContentResolver .insert( Uri  uri ,ContentValues values );

暂时不写






© 著作权归作者所有

共有 人打赏支持
c
粉丝 9
博文 91
码字总数 40993
作品 0
海淀
一图解惑之Android调用ContentProvider基本流程

准备 基本使用 ContentProvider作为四大组件之一,在开发过程中经常被使用到。我们的常规做法是定义一个ContentProvider,然后在使用的时候使用ContentResolver提供的接口来访问数据。一个进...

Catsuo ⋅ 01/10 ⋅ 0

[Android] ContentProvider和Uri详解

一、使用ContentProvider(内容提供者)共享数据 ContentProvider在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过...

枫兮兮 ⋅ 2014/03/03 ⋅ 0

一图解惑之Android管理ContentProvider结构

准备 在上图之前还是先简单总结下相关的数据结构类。 在Framework中可以理解为一个ContentProviderRecord对应应用层中的一个ContentProvider,主要的数据结构类和其相关的成员变量在下面简要...

Catsuo ⋅ 01/10 ⋅ 0

Android读取系统联系人

使用 ContentProvider共享数据: 当应用继承 ContentProvider 类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽 然使用其他方法也可以对外共享数据,但数据访问...

喜欢敲代码的感觉 ⋅ 2015/09/11 ⋅ 0

android数据存储与访问之使用ContentProvider

ContentProvider简介及其好处 简介: ContentProvider 在android中的作用是对外共享数据,也就是说你可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProv...

长平狐 ⋅ 2012/09/03 ⋅ 0

ContentProvider和Uri详解

问题引出: "/getScrollData" 的使用, public static final Uri INBOXCONTENTURI_SCROLLDATA = Uri .parse("content://" + SMSCONFIGAUTHORITY + "/" + SMSINBOXTABLE_NAME + "/getScrollDa......

eric_zhang ⋅ 2012/03/23 ⋅ 0

ContentProvider

android使用一种称为contentprovider的概念来将数据抽象为服务。 这种内容提供给程序的理念看起来像是启用了REST的数据提供程序。REST(REpresentational State Transfer具象状态传输),它是一...

刘小米 ⋅ 2014/11/15 ⋅ 0

ContentProvider学习

当一个应用程序需要把自己的数据暴露给其他程序使用时,该就用程序就可通过提供ContentProvider来实现;其他应用程序就可通过ContentResolver来操作ContentProvider暴露的数据。 一旦某个应用...

天下杰论 ⋅ 2012/09/19 ⋅ 0

android Content Provider 详解

Android中的Contentprovider机制可支持在多个应用中存储和读取数据。这也是跨应用共享数据的唯一方式。在android系统中,没有一个公共的内存区域,供多个应用共享存储数据。 Android提供了一...

鉴客 ⋅ 2011/12/21 ⋅ 5

Content Provider使用

一、Content Provider基本概念 1、Content Provider提供为存储和获取数据提供了统一的接口 2、使用Content Provider可以再不同的应用程序间共享数据 3、Android为常见的一些数据提供了Conte...

小风89 ⋅ 2016/08/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java软件工程师简历中项目经验怎么写?

作者:暗灭 链接:https://www.zhihu.com/question/20695310/answer/180691302 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 直接给你贴个我自己的简历...

颖伙虫 ⋅ 28分钟前 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部