`
isiqi
  • 浏览: 16495798 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

Android数据存储之ContentProvider

阅读更多

1.ContentProvider基础知识:

(1)ContentProvider是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数据共享。

使用ContentProvider共享数据的好处是统一了数据访问方式。

(2)ContentProvider操作的数据不一定来自数据库,也可以是文件、xml或网络等其他存储方式.

(3)ContentProviderscheme已经由Android所规定, scheme为:content://

主机名(或叫Authority)用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。

路径(path)可以用来表示我们要操作的数据,路径的构建应根据业务而定

如下:要操作person表中id10的记录,可以构建这样的路径:/person/10

要操作person表中id10的记录的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记录的Uricontent://com.hoo.provider.personprovider/person,那么返回的MIME类型字符串应 该为:vnd.android.cursor.dir/person”

如果要操作的数据属于非集合类型数据,那么MIME类型字符串应该以vnd.android.cursor.item/开头,

例如:得到id10person记录,Uricontent://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描述)进行监听,当监听到数据变化通知时,系统就会调用ContentObserveronChange()方法:

分享到:
评论

相关推荐

    android 数据共享(ContentProvider)

    ContentProvider提供了一种标准化的机制,使得不同的应用程序可以安全、有序地访问和共享数据,无论这些数据是存储在SQLite数据库、文件系统还是其他持久化存储中。下面我们将深入探讨ContentProvider的工作原理及其...

    android 用ContentProvider操作文件

    在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据,而无需直接访问对方的内部存储。在本教程中,我们将深入探讨如何利用ContentProvider来操作文件,以及其在跨应用数据传输中的作用。 ...

    Android应用开发使用ContentProvider以及SQLite实现对数据库的相关操作

    总结来说,SQLite是Android应用中的主要数据存储方式,而ContentProvider则提供了一种安全、标准化的方式来管理和共享这些数据。开发者应熟悉这两者,以便在实际项目中有效地进行数据库操作。通过熟练掌握...

    Android 之 自定义ContentProvider的使用

    在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的角色。自定义ContentProvider允许开发者创建自己的数据存储解决方案,并与其他应用程序无缝交互。这篇博客将深入探讨如何在...

    Android四大组件之ContentProvider(二)

    首先,ContentProvider主要负责管理和提供数据,这些数据可以存储在SQLite数据库、文件系统或者网络上。它通过定义标准的CRUD(创建、读取、更新、删除)操作接口,使得其他应用能够方便地访问这些数据。...

    Android ContentProvider简单实现

    在Android开发中,ContentProvider是四大组件之一,它充当了数据共享的桥梁,使得不同的应用程序之间可以安全地访问和共享数据。本篇文章将详细介绍如何在Android中实现一个简单的ContentProvider。 首先,理解...

    Android学习 ContentProvider数据更新与Observer模式.doc

    1. 数据存储:数据存储在SQLite数据库中,通过ContentProvider进行访问。 2. 数据监听:使用`ContentObserver`注册到ContentResolver,监听特定Uri对应的数据变化。 3. 数据变更:当ContentProvider中的数据发生变化...

    android 数据库 以及自定义ContentProvider demo

    Android系统使用SQLite作为默认的轻量级数据库,它支持SQL语法,适用于小型数据存储。在Android中,我们通常通过SQLiteOpenHelper这个类来创建、升级和管理数据库。这个类提供了getWritableDatabase()和...

    从头学Android之ContentProvider示例源代码

    - ContentProvider是Android系统中提供数据访问的标准化接口,它封装了数据存储和读取的操作。 - 一个ContentProvider由四个主要方法构成:`query()`, `insert()`, `update()`, `delete()`,分别对应查询、插入、...

    疯狂android资料:第九章使用ContentProvider实现数据共享.doc

    在 Android 中,ContentProvider 是一个抽象的类,它提供了一种方式来存储和管理数据。它可以将数据暴露给其他应用程序,以便它们可以访问和操作这些数据。ContentProvider 可以提供多种类型的数据,包括数据库、...

    Android ContentProvider全面解析

    在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和访问的重要角色。ContentProvider使得应用程序可以将自己的数据结构暴露给其他应用,同时也能够访问其他应用公开的数据。本篇文章将全面解析...

    ContentProvider数据共享

    ContentProvider的数据存储方式多样,可以是SQLite数据库、文件系统或者网络等。具体实现取决于你的需求,但通常推荐使用SQLite数据库,因为它是Android内置的、轻量级的数据库系统。 5. 使用ContentResolver 其他...

    Android第八章ContentProvider

    很多情况下,ContentProvider会与SQLite数据库配合使用,将数据存储在SQLite数据库中。ContentProvider的insert、query、update和delete方法会对应到SQLite数据库的相应操作。这种方式使得数据管理更加规范,同时也...

    Android实现数据存储技术

    Android 平台中实现数据存储的五种方式分别是:使用 SharedPreferences 存储数据、文件存储数据、SQLite 数据库存储数据、使用 ContentProvider 存储数据和网络存储数据。 使用 SharedPreferences 存储数据 ...

    Android之ContentProvider事例

    ContentProvider使得应用程序可以安全地分享内部数据,同时也为其他应用程序提供了一种标准接口来访问这些数据,无论是SQLite数据库、文件系统还是任何其他形式的数据存储。在这个“Android之ContentProvider事例”...

    android程序间数据的共享(ContentProvider和ContentResolver的使用)

    首先,ContentProvider是Android四大组件之一,它作为数据存储和访问的桥梁,允许不同应用之间共享数据。ContentProvider基于URI(统一资源标识符)来暴露数据,并通过标准的CRUD(创建、读取、更新、删除)操作管理...

    android ContentProvider Demo

    4. **处理数据存储**: 通常,ContentProvider会与SQLite数据库配合使用,因此你需要创建一个SQLiteOpenHelper子类,用于创建和升级数据库。在ContentProvider的`query()`等方法中,使用SQLiteOpenHelper来执行SQL...

    android-关于ContentProvider的使用例子

    ContentProvider使得应用程序之间能够安全、有序地访问彼此的数据,无论是系统内置的数据(如联系人、日历等)还是自定义的数据存储。下面我们将深入探讨ContentProvider的使用,并结合"ContentProviderApp1"和...

    android对sqlite、contentprovider的例子

    在Android应用开发中,SQLite和ContentProvider是两个非常重要的组件,它们主要用于数据存储和数据共享。SQLite是一个轻量级的数据库系统,适用于移动设备,而ContentProvider则是一种接口,允许不同应用程序之间...

Global site tag (gtag.js) - Google Analytics