1.ContentProvider基础知识:
(1)ContentProvider是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。
使用ContentProvider共享数据的好处是统一了数据访问方式。
(2)ContentProvider操作的数据不一定来自数据库,也可以是文件、xml或网络等其他存储方式.
(3)ContentProvider的scheme已经由Android所规定, scheme为:content://
主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定,
如下:要操作person表中id为10的记录,可以构建这样的路径:/person/10
要操作person表中id为10的记录的name字段,
person/10/name
要操作person表中的所有记录,可以构建这样的路径:/person
要操作xxx表中的记录,可以构建这样的路径:/xxx
例如:content://com.hoo.provider.personprovider/person
(4)当应用需要通过ContentProvider对外共享数据时,第一步需要继承ContentProvider并重写下面方法:这里重写的方法可以根据需求进行选择性的重写
2.UriMatcher与ContentUris
(1)UriMatcher类
UriMatcher类用于匹配Uri,它的用法如下:
首先第一步把你需要匹配Uri路径全部给注册上,如下:
注册完需要匹配的Uri后,就可以使用sMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码,匹配码是调用addURI()方法传入的第三个参数,假设匹配content://com.hoo.provider.personprovider/person路径,返回的匹配码为1
(2)ContentUris类
ContentUris类用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
withAppendedId(uri,
id) //用于为路径加上ID部分:
Uri
uri
= Uri.parse("content://com.hoo.provider.personprovider/person")
Uri
resultUri
= ContentUris.withAppendedId(uri,
10);
//生成后的Uri为:content://com.hoo.provider.personprovider/person/10
parseId(uri)方法用于从路径中获取ID部分:
Uri
uri
= Uri.parse("content://com.hoo.provider.personprovider/person/10")
long
personid
= ContentUris.parseId(uri);//获取的结果为:10
3.使用ContentResolver操作ContentProvider中的数据
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver类来完成,要获取ContentResolver对象,可以使用Activity提供的getContentResolver()方法。
ContentResolver类提供了与ContentProvider类相同签名的四个方法:
public Uri insert(Uriuri,ContentValuesvalues)
该方法用于往ContentProvider添加数据。
publicintdelete(Uriuri, String selection, String[]selectionArgs)
该方法用于从ContentProvider删除数据。
publicintupdate(Uriuri,ContentValuesvalues, String selection, String[]selectionArgs)
该方法用于更新ContentProvider中的数据。
public Cursor query(Uriuri, String[] projection, String selection, String[]selectionArgs, StringsortOrder)
该方法用于从ContentProvider中获取数据。
4.ContentProvider类主要方法的作用:
(1)public
boolean
onCreate()
该方法在ContentProvider创建后就会被调用,
Android开机后, ContentProvider在其它应用第一次访问它时才会被创建。
(2)public
Uri insert(Uri uri, ContentValues
values)
该方法用于供外部应用往ContentProvider添加数据。
(3)public
int
delete(Uri uri,
String selection, String[] selectionArgs)
该方法用于供外部应用从ContentProvider删除数据。
(4)public
int
update(Uri uri,
ContentValues
values, String selection, String[] selectionArgs)
该方法用于供外部应用更新ContentProvider中的数据。
(5)public
Cursor query(Uri uri,
String[] projection, String selection, String[] selectionArgs,
String sortOrder)
该方法用于供外部应用从ContentProvider中获取数据。
(6)public
String getType(Uri
uri)
该方法用于返回当前Url所代表数据的MIME类型。
如果操作的数据属于集合类型,那么MIME类型字符串应该以vnd.android.cursor.dir/开头,
例如:要得到所有person记录的Uri为content://com.hoo.provider.personprovider/person,那么返回的MIME类型字符串应 该为:“vnd.android.cursor.dir/person”。
如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头,
例如:得到id为10的person记录,Uri为content://com.hoo.provider.personprovider/person/10,那么返回的MIME类型字符串应该为:“vnd.android.cursor.item/person”。
5.实例演示
(1)操作目标类,对下面的Person类进行数据共享:Person.java
(2)在AndroidManifest.xml进行设置:写在<application>标签里面
(3)PersonProvider.java
(4)AccessContentProviderTest.java(单元测试用例)
6.监听ContentProvider中数据的变化
(1)如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调用getContentResolver().notifyChange(uri, null)来通知注册在此URI上的访问者,
例子如下:
(2)如果ContentProvider的访问者需要得到数据变化通知,必须使用ContentObserver对数据(数据采用uri描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserver的onChange()方法:
分享到:
相关推荐
ContentProvider提供了一种标准化的机制,使得不同的应用程序可以安全、有序地访问和共享数据,无论这些数据是存储在SQLite数据库、文件系统还是其他持久化存储中。下面我们将深入探讨ContentProvider的工作原理及其...
在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据,而无需直接访问对方的内部存储。在本教程中,我们将深入探讨如何利用ContentProvider来操作文件,以及其在跨应用数据传输中的作用。 ...
总结来说,SQLite是Android应用中的主要数据存储方式,而ContentProvider则提供了一种安全、标准化的方式来管理和共享这些数据。开发者应熟悉这两者,以便在实际项目中有效地进行数据库操作。通过熟练掌握...
在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的角色。自定义ContentProvider允许开发者创建自己的数据存储解决方案,并与其他应用程序无缝交互。这篇博客将深入探讨如何在...
首先,ContentProvider主要负责管理和提供数据,这些数据可以存储在SQLite数据库、文件系统或者网络上。它通过定义标准的CRUD(创建、读取、更新、删除)操作接口,使得其他应用能够方便地访问这些数据。...
在Android开发中,ContentProvider是四大组件之一,它充当了数据共享的桥梁,使得不同的应用程序之间可以安全地访问和共享数据。本篇文章将详细介绍如何在Android中实现一个简单的ContentProvider。 首先,理解...
1. 数据存储:数据存储在SQLite数据库中,通过ContentProvider进行访问。 2. 数据监听:使用`ContentObserver`注册到ContentResolver,监听特定Uri对应的数据变化。 3. 数据变更:当ContentProvider中的数据发生变化...
Android系统使用SQLite作为默认的轻量级数据库,它支持SQL语法,适用于小型数据存储。在Android中,我们通常通过SQLiteOpenHelper这个类来创建、升级和管理数据库。这个类提供了getWritableDatabase()和...
- ContentProvider是Android系统中提供数据访问的标准化接口,它封装了数据存储和读取的操作。 - 一个ContentProvider由四个主要方法构成:`query()`, `insert()`, `update()`, `delete()`,分别对应查询、插入、...
在 Android 中,ContentProvider 是一个抽象的类,它提供了一种方式来存储和管理数据。它可以将数据暴露给其他应用程序,以便它们可以访问和操作这些数据。ContentProvider 可以提供多种类型的数据,包括数据库、...
在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。ContentProvider使得应用程序可以将自己的数据结构暴露给其他应用,同时也能够访问其他应用公开的数据。本篇文章将全面解析...
ContentProvider的数据存储方式多样,可以是SQLite数据库、文件系统或者网络等。具体实现取决于你的需求,但通常推荐使用SQLite数据库,因为它是Android内置的、轻量级的数据库系统。 5. 使用ContentResolver 其他...
很多情况下,ContentProvider会与SQLite数据库配合使用,将数据存储在SQLite数据库中。ContentProvider的insert、query、update和delete方法会对应到SQLite数据库的相应操作。这种方式使得数据管理更加规范,同时也...
Android 平台中实现数据存储的五种方式分别是:使用 SharedPreferences 存储数据、文件存储数据、SQLite 数据库存储数据、使用 ContentProvider 存储数据和网络存储数据。 使用 SharedPreferences 存储数据 ...
ContentProvider使得应用程序可以安全地分享内部数据,同时也为其他应用程序提供了一种标准接口来访问这些数据,无论是SQLite数据库、文件系统还是任何其他形式的数据存储。在这个“Android之ContentProvider事例”...
首先,ContentProvider是Android四大组件之一,它作为数据存储和访问的桥梁,允许不同应用之间共享数据。ContentProvider基于URI(统一资源标识符)来暴露数据,并通过标准的CRUD(创建、读取、更新、删除)操作管理...
4. **处理数据存储**: 通常,ContentProvider会与SQLite数据库配合使用,因此你需要创建一个SQLiteOpenHelper子类,用于创建和升级数据库。在ContentProvider的`query()`等方法中,使用SQLiteOpenHelper来执行SQL...
ContentProvider使得应用程序之间能够安全、有序地访问彼此的数据,无论是系统内置的数据(如联系人、日历等)还是自定义的数据存储。下面我们将深入探讨ContentProvider的使用,并结合"ContentProviderApp1"和...
在Android应用开发中,SQLite和ContentProvider是两个非常重要的组件,它们主要用于数据存储和数据共享。SQLite是一个轻量级的数据库系统,适用于移动设备,而ContentProvider则是一种接口,允许不同应用程序之间...