Content Provider

本文详细介绍了Android中的ContentProvider组件,包括其基本概念、如何查询及修改数据、以及如何创建自定义的ContentProvider。同时探讨了ContentProvider作为应用间数据共享的重要机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Content providers可以存储并重新获取数据,它可以让所有的应用程序得到。使用Content providers是唯一的在应用程序中分享数据的方法;在android中,所有包都能使用的共同的区域是没有的。


android给普通数据类型装载了许多content providers,例如audio,video,images,个人联系信息,等等。可以从android.provider包中看到以列表形式展现出来,在这里可以查询数据包含的provider。(但是,需要获得读数据的权限)


如果想让数据公开化,有两个选择:第一,可以创建一个属于自己的content provider,通过继承ContentProvider类;第二,通过添加数据到一个已经存在的provider,前提是已经存在一个控制着相同数据类型的provider,并且你有往里面写入数据的权限。


该文档介绍了如何使用content providers,当对原理简单讨论之后,将介绍如何查询一个content provider,如何修改provider控制的数据,和如何创建一个属于自己的content provider。

 

Content Provider基础

 

设计者负责覆盖content provider存储的数据,所有的content provider 为了了查询provider和返回结果需要实现一个公共的接口,就像添加、修改、删除数据一样。

 

客户间接使用的这个接口多数是通过 contentResolver 对象,设计者可以从实现一个activity或者其他应用程序里面得到一个contentResolver  通过调用 getContentResolver() 方法。

 

如:ContentResolver cr = getContentResolver();

 

然后可以使用ContentResolver的方法,和任何的content provide 相互作用。

 

当查询开始时,android 系统确定 content provider是查询目标,并且确保正在运行。系统会初始化 ContentProvider对象,这个不需要你去做,事实上,你根本不需要直接处理 ContentProvider 对象。每一个 ContentProvider 类型都是一个单一实例。但是它会和处于不同应用程序或者进程中的 ContentResolver 对象进行通信。所以,ContentProvider 和 ContentResolver 类 用来处理不用进程间的相互作用。

 

数据模型

 

Content Providers 在数据库一个简单的表上展示数据,这张表每一行行都是一条记录,每一列都是特别的数据类型,例如,人员和他们的电话号码信息将以下列方式展示:

 


 

 

每一条记录包含了一个标识该记录的数字 _ID ,这些ID可以用来匹配关联表中的记录,例如:在一张表中查找一个人的电话号码,通过这个人的ID可以映射到另外一张表的关于这个人的信息。(这段话翻译的很纠结,自己也没弄清楚作者后面这句话想表明什么意思)

 

一个查询将会返回一个Cursor 对象,这个返回的对象通过读取内容字段中每一行,每一列的值的形式获得,它使用专门的方法来读取每一种类型的数据,所以,如果要读取某一个字段,必须先知道该字段包含的是哪种数据类型。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值