`
coolxing
  • 浏览: 874836 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
9a45b66b-c585-3a35-8680-2e466b75e3f8
Java Concurre...
浏览量:97540
社区版块
存档分类
最新评论

android笔记--android数据存储--ContentProvider

阅读更多

[coolxing按: 转载请注明作者和出处, 如有谬误, 欢迎在评论中指正.]

 

ContentProvider是android中不同应用程序之间进行数据交换的标准API, 当一个应用程序需要将自己的数据暴露给其他应用程序使用时, 就可以通过提供ContentProvider来实现, 其他应用程序就可以通过ContentResolver来操作ContentProvider暴露的数据.

ContentProvider是android应用的四大组件之一, 需要在AndroidManifest.xml文件中配置, 如下例:

<provider android:name=".PersonProvider" android:authorities="cn.itcast.providers.personprovider"/>

一旦某个应用程序通过ContentProvider暴露了自己的数据操作接口, 那么不管该应用是否启动, 其他应用程序都可以通过这个接口来操作该应用的内部数据.

 

ContentProvider的大部分方法都涉及到了Uri, 我们需要了解什么是Uri, 怎样匹配Uri. 

Uri类. android中Uri由三部分组成--scheme, authority和path, 格式为scheme://authority/path. 其中ContentProvider的scheme为content://.

ContentProvider的authority可以在配置文件中配置<provider>元素时, 通过android:authorities属性指定. path为资源的路径.

UriMatcher类. UriMatcher 类主要用于匹配Uri. 

1, 创建实例对象. UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH);  其中UriMatcher.NO_MATCH为调用int match (Uri uri)方法不存在匹配的Uri时的返回值.

2, 调用matcher的void addURI (String authority, String path, int code)方法给匹配器添加Uri, #为通配符. code参数为调用int match (Uri uri)方法匹配这个Uri时的返回值.

3, 调用int match (Uri uri)方法, 如果能够匹配返回相应的code值, 否则返回UriMatcher.NO_MATCH.

ContentUris类. ContentUris类用于解析Uri末尾处的数字或给Uri在其末尾处添加数字.

|--static long parseId (Uri contentUri): 解析出Uri路径部分的ID.

|--static Uri withAppendedId (Uri contentUri, long id): 给Uri的路径部分添加ID.

 

定义ContentProvider. 开发一个完整的ContentProvider需要自定义一个ContentProvider的子类, 并提供以下几个方法:

|--boolean onCreate (): 当该ContentProvider首次被其他应用访问时, 系统将创建ContentProvider的子类对象, 并调用其onCreate()方法.

|--Uri insert (Uri uri, ContentValues values): 插入数据操作.

|--int delete (Uri uri, String selection, String[] selectionArgs): 删除数据操作.

|--int update (Uri uri, ContentValues values, String selection, String[] selectionArgs): 更新数据操作.

|--Cursor query (Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder): 查询操作.

|--String getType (Uri uri): 返回当前Uri所代表的数据的MIME类型. 如果该Uri对应的数据可能包括多条记录,

那么MIME类型字符串应该以vnd.android.cursor.dir/开头, 如果该Uri对应的数据只包含一条记录, 则MIME类型字符串应该以vnd.android.cursor.item/开头.

 

在其他应用中使用ContentResolver操作数据. Context类提供了ContentResolver getContentResolver ()方法用以获取其ContentResolver实例.

调用ContentResolver类的增删改查方法就可以操作数据了.

 

监听ContentProvider的数据改变. 调用ContentResolver的增删改方法都可能导致ContentProvider暴露的数据发生改变, 为了实现对数据发生改变的监听,

需要:

1, 注册监听器. 调用ContentResolver类的void registerContentObserver (Uri uri, boolean notifyForDescendents, ContentObserver observer)方法即可为指定uri注册监听器. 如果notifyForDescendents为true, 假如注册监听的uri为content://abc, 那么uri为content://abc/xxx或content://abc/xxx/yyy的数据发生改变时也会触发该监听器. 如果notifyForDescendents为false, 那么只有content://abc的数据发生改变时会触发监听器.

ContentObserver类是一个抽象类, 因此需要定义一个ContentObserver类的子类, 并重写其onChange()方法, 当监听器被触发时, 回调ContentObserver子类对象的onChange()方法.

2, 当数据发生改变时发出通知. 发出通知的代码可以是getContext().getContentResolver().notifyChange(uri, null), 用以通知注册在该uri上的监听器ContentProvider所共享的数据发生了改变.

 

分享到:
评论
1 楼 Robineager 2012-09-10  
博主是否想过为什么要使用ContentResolver来操作那个ConetentProvider的数据,而不是直接得到那个ContentProvider的实例后进行直接操作呢?这一点我不是很明白

相关推荐

    Android群英传笔记-----by ---------刘某人程序员

    在数据存储方面,笔记涵盖了SQLite数据库的使用、SharedPreferences配置文件的读写,以及如何利用ContentProvider进行数据共享。这些知识可以帮助你有效地管理和持久化应用的数据。 此外,笔记还涉及到了网络编程,...

    Android--NoteBook

    Android提供了多种数据存储方式,如SQLite数据库、SharedPreferences、内部存储和外部存储等。考虑到备忘录应用通常需要持久化数据,开发者可能使用了SQLite数据库来存储用户的笔记内容。SQLite是一个轻量级的数据库...

    Android自学笔记-13-ContentObserver内容观察者

    ContentObserver主要用于监控ContentResolver中的内容更改,这些内容通常存储在ContentProvider中。当某个ContentProvider的数据发生变化时,如增删改数据,ContentObserver会接收到相应的通知,从而触发自定义的回...

    Android代码-android-note

    最后,Android笔记可能还包括对最新Android版本特性(如Material Design、 Jetpack库、AndroidX等)的介绍和应用,以及如何将应用适配不同屏幕尺寸和设备的技巧。 综上所述,"Android代码-android-note"这个压缩包...

    新版Android开发教程笔记--基础入门一

    8. **数据存储**:Android提供了多种数据存储方式,包括SharedPreferences用于轻量级数据存储,SQLite数据库用于结构化的数据管理,以及ContentProvider用于共享数据。 9. **异步编程**:Android中的AsyncTask、...

    Android-NONo-Android是NONo--下一代个人云笔记平台的Android端应用

    4. **数据管理**:本地数据存储可能利用SQLite数据库来保存笔记内容,同时可能使用ContentProvider进行数据共享和访问控制。 5. **网络通信**:为了实现云服务功能,应用可能使用了OkHttp或者Retrofit等网络库进行...

    Android--开发--开发教程笔记完全版.rar

    6. **数据存储**:讲解SharedPreferences、SQLite数据库、文件存储以及ContentProvider的使用方法,以及何时选择合适的存储方式。 7. **网络编程**:介绍如何使用HttpURLConnection、OkHttp、Retrofit等库进行网络...

    新版Android开发教程及笔记-完整版

    这份资料可能包含了从基础到高级的各种主题,包括但不限于Android系统架构、UI设计、数据存储、网络通信、性能优化等多个方面。 首先,Android系统架构是学习的基础。它由Linux内核、硬件抽象层、运行库层、应用...

    Android记事本-demo

    1. **文本数据的存储**:在Android中,有多种方式可以存储文本数据。最简单的是使用SharedPreferences,适合保存小量的键值对数据。对于更复杂的数据结构,可以使用SQLite数据库,或者如果数据量不大,也可以选择...

    Android代码-使用Kotlin实现的一个简单的记事本App

    - **SQLite数据库**:Android原生的轻量级数据库系统,用于持久化存储数据。在这个应用中,可能会用到SQLiteOpenHelper来创建和管理数据库,以及ContentProvider来封装数据库操作,使得数据共享更安全。 5. **生命...

    李兴华Android开发实战经典-PPT课件-笔记

    4. **数据存储**:在Android开发中,数据存储是一个重要的话题。课程可能会涉及SharedPreferences、SQLite数据库、文件存储以及ContentProvider的使用。 5. **网络编程**:讲解如何在Android应用中实现网络请求,如...

    Android代码-Knote

    【Android代码-Knote】是关于开发一款名为Knote的简单Android笔记应用的源代码库。这个项目主要关注Android平台上的应用程序开发,旨在提供一个轻量级、用户友好的笔记工具。下面将详细介绍在这个项目中涉及的...

    android学习笔记最新版(1-4)

    Activity是用户界面的入口,Service用于在后台运行任务,BroadcastReceiver则能监听系统或自定义广播事件,ContentProvider则负责数据的存储和共享。此外,还会讲解如何创建和配置Android项目,包括AndroidManifest....

    Android教程+笔记十二--文件存取、数据库编程.zip

    本教程将深入探讨这两个主题,帮助开发者更好地理解如何在Android系统中管理和存储数据。 ### 文件存取 #### 1. 存储类型 Android提供了多种文件存储方式: - **内部存储**:应用程序私有的,安全且不易被其他...

    Android学习笔记(5-13)

    总的来说,这份笔记覆盖了Android开发的多个核心方面,从基础的UI设计和数据管理到网络通信和组件交互,对于想要系统学习Android开发的读者来说,是一份非常有价值的资源。通过学习这些章节,读者不仅可以构建自己的...

    xamarin学习笔记A11(安卓ContentProvider)

    - 内容提供器是Android四大组件之一(Activity、Service、BroadcastReceiver、ContentProvider),它的主要职责是作为数据存储和访问的接口。 - ContentProvider使得不同应用间的私有数据可以安全地共享,遵循特定...

    Android代码-[安卓开源]适合新手的简单记事本项目.zip

    5. **ContentProvider**:ContentProvider 是 Android 提供的一种机制,用于在应用间共享数据。在这个项目中,ContentProvider 可能被用来管理和访问 SQLite 数据库中的笔记数据。 6. **Intent**:Intent 在 ...

    基于Android Studio开发的笔记APP.rar

    在Android中,使用SQLiteOpenHelper作为数据库操作的基类,创建数据库和升级机制,通过ContentProvider对外提供数据访问接口。 4. **Activity与Fragment** 在Android中,Activity是应用程序的入口,负责处理用户...

    Android-一款用于管理个人图书及阅读笔记的移动Android应用

    Android的SQLite数据库同样可以用来存储笔记数据,但为了提升用户体验,我们还可以考虑采用云同步技术,如Google Firebase,它提供了实时数据库和存储服务,可以实现数据在不同设备间的无缝同步。 应用的UI设计至关...

Global site tag (gtag.js) - Google Analytics