- 浏览: 50526 次
文章分类
- 全部博客 (25)
- Android (19)
- startActivityForResult() (1)
- Intent (3)
- HTML (1)
- onCreate (1)
- Button (3)
- OnClick (3)
- Activity (2)
- savedInstanceState (1)
- Service (2)
- message (1)
- Notification (1)
- Broadcast (1)
- SQLite (1)
- SharePreferences (1)
- Galaxy 9300 (1)
- 刷机 (1)
- root (1)
- ContentProvider (1)
- 笔记本 (1)
- 散热 (1)
- 算法 (3)
- C (4)
- socket (0)
- java (0)
最新评论
ContentProvider学习笔记
ContentProvider简介
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同,如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。而使用ContentProvider共享数据的好处是统一了数据访问方式。
一个Content Provider类实现了一组标准的方法接口,从而能够让其他的应用保存或读取此Content Provider的各种数据类型。
也就是说,一个程序可以通过实现一个Content Provider的抽象接口将自己的数据暴露出去。
外界根本看不到,也不用看到这个应用暴露的数据在应用当中是如何存储的,或者是用数据库存储还是用文件存储,还是通过网上获得,这些一切都不重要,
重要的是外界可以通过这一套标准及统一的接口和程序里的数据打交道,可以读取程序的数据,也可以删除程序的数据,
当然,中间也会涉及一些权限的问题。
Uri类简介
Uri代表了要操作的数据,Uri主要包含了两部分信息:1.需要操作的ContentProvider ,2.对ContentProvider中的什么数据进行操作,一个Uri由以下几部分组成:
1.scheme:ContentProvider(内容提供者)的scheme已经由Android所规定为:content://。
2.主机名(或Authority):用于唯一标识这个ContentProvider,外部调用者可以根据这个标识来找到它。
3.路径(path):可以用来表示我们要操作的数据,路径的构建应根据业务而定,如下:
• 要操作contact表中id为10的记录,可以构建这样的路径:/contact/10
• 要操作contact表中id为10的记录的name字段, contact/10/name
• 要操作contact表中的所有记录,可以构建这样的路径:/contact
如下:
· content://contacts/people/ 这个Uri指定的就是全部的联系人数据。
· content://contacts/people/1 这个Uri指定的是ID为1的联系人的数据。
在上边两个类中用到的Uri一般由3部分组成。
· 第一部分是方案:"content://" 这部分永远不变
· 第二部分是授权:"contacts"
· 第三部分是路径:"people/","people/1"(如果没有指定ID,那么表示返回全部)。
要操作的数据不一定来自数据库,也可以是文件等其他存储方式,如下:
要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
由于URI通常比较长,而且有时候容易出错,且难以理解。所以,在Android当中定义了一些辅助类,并且定义了一些常量来代替这些长字符串的使用,例如下边的代码:
· Contacts.People.CONTENT_URI (联系人的URI)。
UriMatcher、ContentUrist和ContentResolver简介
因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。
- UriMatcher
UriMatcher:用于匹配Uri。
1.首先把你需要匹配Uri路径全部给注册上,注册如下:
//常量UriMatcher.NO_MATCH表示不匹配任何路径的返回码(-1)。
UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
//如果match()方法匹配content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回匹配码为1
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact”, 1);//添加需要匹配uri,如果匹配就会返回匹配码
//如果match()方法匹配 content://com.changcheng.sqlite.provider.contactprovider/contact/230路径,返回匹配码为2
uriMatcher.addURI(“com.changcheng.sqlite.provider.contactprovider”, “contact/#”, 2);//#号为通配符
2.注册完需要匹配的Uri后,就可以使用uriMatcher.match(uri)方法对输入的Uri进行匹配,如果匹配就返回匹配码
- ContentUris
ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
1、 withAppendedId(uri, id)用于为路径加上ID部分
2、 parseId(uri)方法用于从路径中获取ID部分
- ContentResolver
当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用ContentResolver 类来完成,要获取ContentResolver 对象,可以使用Activity提供的getContentResolver()方法。
ContentResolver使用insert、delete、update、query方法,来操作数据。
· query(Uri uri, String[] projection, String selection, String[] selectionArgs,String sortOrder):通过Uri进行查询,返回一个Cursor。
· insert(Uri url, ContentValues values):将一组数据插入到Uri 指定的地方。
· update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新Uri指定位置的数据。
· delete(Uri url, String where, String[] selectionArgs):删除指定Uri并且符合一定条件的数据。
参考帖子连接:
http://www.cnblogs.com/chenglong/articles/1892029.html
http://blog.csdn.net/hudashi/article/details/6929137
发表评论
-
Galaxy 9300 刷机和获取root权限
2012-08-08 14:19 1618刷机和ROOT是两个不同但是很类似的动作。 刷机应该就 ... -
SharedPreferences 存储
2012-07-27 20:02 929SharedPreferences是Android平台 ... -
SQLite 存储
2012-07-27 10:33 804SQLite是一种轻量级的,嵌入式的数据库系统,它占用的资源非 ... -
Android Broadcast 广播
2012-07-23 10:47 946从现实生活中理解广播机制 一听到广播我们第一感觉就会联 ... -
Status Notification
2012-07-22 18:12 1353Status Notification是作用是在页眉的位置,提 ... -
Android Message机制
2012-07-20 11:01 1211参考链接http://www.cnblogs.com/hnra ... -
Android Service之bindService()
2012-07-17 14:37 1224http://www.cnblogs.com/onlylitt ... -
Android Service 之StartService()
2012-07-17 10:25 11795Service是android 系统中的一种组件,它跟Acti ... -
Activity_savedInstanceState
2012-07-14 10:31 4026假设有两个Activity,分别是MainActivity,S ... -
Activity生命周期
2012-07-13 11:24 763Activity的生命周期图如上所示 用一个实例来测试 ... -
ButtonDemo_OnClick_2
2012-07-13 00:47 634public void onCreate(Bundle ... -
intentDemo_2
2012-07-13 00:45 784<manifest xmlns:android=& ... -
intentDemo_1
2012-07-13 00:45 605package com.test.intentdemo; ... -
ButtonDemo_OnClick_3
2012-07-13 00:45 600package com.test.buttondemo; ... -
ButtonDemo_OnClick_1
2012-07-12 22:51 900public class MainActivity ex ... -
Android开发——关于onCreate的解读
2012-07-12 22:48 622在AndroidManifest.xml文件中的< ... -
startActivityForResult()的用法
2012-07-12 22:43 1616参考链接:http://www.cnblogs.com/mub ... -
Intent传递数据从一个Activity到另一个Activity
2012-07-12 21:19 11831MainActivity package com.te ...
相关推荐
在Android应用开发中,数据持久化是一个至关重要的环节,而Android Room和ContentProvider是其中的两个关键组件。本文将深入探讨这两个技术,并结合实际案例,解释如何在Android应用中使用它们来管理和共享SQLite...
在Android系统中,ContentProvider是一种核心组件,它允许应用程序之间共享数据,而无需直接访问对方的内部存储。在本教程中,我们将深入探讨如何利用ContentProvider来操作文件,以及其在跨应用数据传输中的作用。 ...
在Android开发中,ContentProvider和Uri是两个至关重要的概念,它们是Android系统中不同应用程序间数据共享和交互的基础。本文将深入探讨这两个组件的工作原理、使用方法以及它们在实际开发中的应用。 首先,我们来...
本教程将深入探讨如何利用Broadcast和ContentProvider实现两个apk之间的通信以及ContentProvider对数据库变更的监听。 首先,我们来理解Broadcast(广播)的概念。Broadcast是Android系统中一种全局的通知机制,...
Android高级编程雪梨作业之自定义ContentProvider 将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交...
ContentProvider是Android系统中的四大组件之一,它是Android应用程序间数据共享的主要机制。通过ContentProvider,一个应用可以将自己的数据暴露给其他应用,同时也能够访问其他应用公开的数据。在Android的封闭...
在Android系统中,ContentProvider是实现数据共享和跨应用数据访问的重要组件。它遵循统一的URI(Uniform Resource Identifier)机制,使得不同的应用可以方便地读取和修改存储在ContentProvider中的数据。本教程将...
ContentProvider是Android系统中用于数据共享的一个核心组件,它允许应用程序之间进行数据交换,而无需了解对方的具体实现。本教程将深入讲解ContentProvider的使用方法,包括基础操作、多ContentProvider管理和多表...
在Android开发中,ContentProvider和ContentResolver是两个关键组件,它们构成了Android系统中不同应用程序间数据共享的基础。本文将深入探讨如何自定义ContentProvider和如何有效地使用ContentResolver进行数据操作...
ContentProvider是Android系统中用于数据共享的重要组件,它是不同应用程序之间安全地交换数据的桥梁。当你想要在自己的应用中公开数据,允许其他应用进行访问时,就需要使用ContentProvider。虽然在许多情况下,...
在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序间可以安全地访问和操作数据。本篇文章将深入探讨如何自定义ContentProvider以及如何使用系统提供的ContentProvider。 ...
在Android开发中,ContentProvider是四大组件之一,它充当了数据共享的桥梁,使得不同的应用程序之间可以安全地访问和操作数据。本示例将详细解释如何在Android中使用ContentProvider。 1. **ContentProvider基本...
在Android开发中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的角色。本实战源码深入解析了ContentProvider的工作原理及其在实际项目中的应用,通过阅读源码,开发者可以更好地理解如何创建...
`SharedPreferences` 和 `ContentProvider` 是两种常见的数据存储和共享机制。本篇文章将深入探讨如何利用 `SharedPreferences` 作为数据存储,并通过实现 `ContentProvider` 来实现不同应用间的数据共享。 `...
在Android系统中,ContentProvider是一种重要的组件,它允许应用程序之间共享数据。`android 创建数据库contentprovider`这个主题主要涉及如何创建一个自定义的ContentProvider来管理数据库中的数据,并实现跨应用的...
在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享的角色,使得不同应用程序之间可以安全地访问和操作彼此的数据。本篇文章将详细讲解如何使用ContentProvider通过ContentResolver来获取系统的图片...
在Android开发中,ContentProvider是系统提供的一种数据共享机制,它允许不同的应用之间进行数据交换。ContentProvider基于URI(统一资源标识符)进行操作,通过ContentResolver接口与ContentProvider进行通信。本...