- 浏览: 624136 次
文章分类
最新评论
-
q781253433:
qin ~.求demo看看~
Android之Widget -
zhongyuanceshi:
博主,没看到你的例子的Demo,共享下
Android之Widget
1、 ContentProvider简介
ContentProvider是不同应用程序之间进行数据交换的标准API,使用它一个程序可以把自己的数据暴露给其他的程序。
ContentProvider以某种Uri的形式对外提供数据,允许其他应用程序访问或修改数据。
外界对数据的操作也就是CRUD操作(In computing, CRUD is an acronym for create, retrieve, update, and delete. )
,
如果要实现暴露自己的数据的话,除了继承
ContentProvider外,还需要实现以下一些方法:insert(),delete(),update(),query(),getType(),onCreate()。
当外界访问 ContentProvider的数据时,会自动创建 ContentProvider,此时会立即回调 onCreate方法。
ContentProvider是单实例模式的,只会创建一个。
当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法 ,就可以向其他应用共享其数据。虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同。
如:采用文件方式对外共享数据,需要进行文件操作读写数据;采用sharedpreferences共享数据,需要使用sharedpreferences API读写数据。
而使用ContentProvider共享数据的好处是统一了数据访问方式
2、通过ContentProvider对外共享数据的步骤:
第一步 建立一个类继承ContentProvider并根据重写下面方法(下面的方法并不是都要实现) :
public class PersonContentProvider extends ContentProvider{
public boolean onCreate()
public Uri insert(Uri uri, ContentValues values)
public int delete(Uri uri, String selection, String[] selectionArgs)
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
public String getType(Uri uri)
}
第二步 需要在AndroidManifest.xml使用<provider>对该ContentProvider进行配置 ,为了能让其他应用找到该ContentProvider , ContentProvider 采用了authorities(主机名/域名) 对它进行唯一标识。
<manifest .... >
<application android:icon="@drawable/icon" android:label="@string/app_name">
<provider android:name=".PersonContentProvider" android:authorities="cn.itcast.provider.personprovider"/>
</application>
</manifest>
注意:一旦应用继承了ContentProvider类,后面我们就会把这个应用称为ContentProvider(内容提供者)。
3、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
要操作的数据不一定来自数据库,也可以是文件等他存储方式,如下:
要操作xml文件中contact节点下的name节点,可以构建这样的路径:/contact/name
如果要把一个字符串转换成Uri,可以使用Uri类中的parse()方法,如下:
Uri uri = Uri.parse("content://com.changcheng.provider.contactprovider/contact")
4、UriMatcher、ContentUrist和ContentResolver简介
因为Uri代表了要操作的数据,所以我们很经常需要解析Uri,并从Uri中获取数据。Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris 。掌握它们的使用,会便于我们的开发工作。
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进行匹配,如果匹配就返回匹配码,匹配码是调用
addURI()方法传入的第三个参数,假设匹配
content://com.changcheng.sqlite.provider.contactprovider/contact路径,返回的匹配
码为1。
ContentUris:用于获取Uri路径后面的ID部分,它有两个比较实用的方法:
• withAppendedId(uri, id)用于为路径加上ID部分
• parseId(uri)方法用于从路径中获取ID部分
ContentResolver:当外部应用需要对ContentProvider中的数据进行添加、删除、修改和查询操作时,可以使用
ContentResolver 类来完成,要获取ContentResolver
对象,可以使用Activity提供的getContentResolver()方法。
ContentResolver使用insert、delete、update、query方法,来操作数据。
发表评论
-
Android之Fastboot、Recovery基础知识
2013-12-19 22:13 1071参考文章: http://blog.csdn.net/y9 ... -
Eclipse设置主题
2013-10-26 22:32 695下载自己喜欢的主题: http://eclipsec ... -
gitignore文件的配置
2013-09-24 15:29 1727gitignore文件在Android ... -
Eclipse安装Git插件
2013-09-24 14:20 790http://jiangli.easymorse.com/?p ... -
Eclipse像Xcode一样自动有提示
2013-09-05 17:04 12171. 打开Eclipse,然后打开“Preferences ... -
点九PNG技术
2013-04-16 13:26 884参考文章: http://blog.csdn.net/g ... -
Android ASE 脚本环境
2013-04-10 12:32 1184原文: http://blog.sina.com.cn/ ... -
android 按两次返回键退出
2012-12-25 20:01 1316package com.anjoyo.test; ... -
android混淆代码总结
2012-12-19 18:02 1519反编译工具下载地址:http://ishare.iask.si ... -
System.out.printf输出格式
2012-12-13 22:01 2519// 定义一些变量,用来格式化输出。 double ... -
Regex正则表达式的使用
2012-12-09 20:20 1820正则表达式是用来描述某些字符串规则的工具,可以用此规则来做 ... -
IOS&Android开发 使用特殊字体,使用自定义字体
2012-11-24 00:16 1567IOS开发: 原文链接:http://tieba.baidu ... -
AspectJ的安装和Eclipse的AJDT插件的配置
2012-11-19 15:21 4942安装AspectJ是为了正常使用软件MonkeyTalk 1 ... -
Mac配置android开发环境
2012-11-13 16:18 48一.Eclipse的下载 到网站:http ... -
RelativeLayout相关属性
2012-11-13 14:49 960android:layout_centerInP ... -
Android资源文件
2012-11-04 15:22 984res [res中共有10种文 ... -
activity的启动方式(launch mode)
2012-11-04 15:14 863其他很详细的参考:http://blog.csdn.net/b ... -
android分享功能的实现(分享到微博空间等)
2012-11-03 22:15 2206//Intent intent = new Inten ... -
Android开发环境配置
2012-11-03 20:04 8801、JDK安装: http://jing ... -
android intent和intent action大全
2012-09-13 20:25 1057android 中intent是经常要用到的。不管是页面 ...
相关推荐
本文将详细解析2011年9月7日关于Android跨进程通信之Content Provider的知识点,结合相关源码和实用工具进行阐述。 Content Provider是Android四大组件之一,它扮演着数据管理者的角色,允许不同的应用程序之间共享...
5. **内容提供者(ContentProvider)**:如果源码中涉及到数据存储,可能会用到ContentProvider,它是应用间共享数据的标准接口。虽然微博数据可能由服务器提供,但在本地缓存数据时,ContentProvider可能会发挥作用...
一个标准的Android应用通常由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收者)和ContentProvider(内容提供者)。开发者需要理解每个组件的职责和它们之间的交互方式。 1. **...
10. **05_3_内容提供者的使用.pdf** 内容提供者是Android中不同应用程序间数据共享的关键组件。本章讲解了ContentProvider的实现,包括SQLite数据库的使用,以及如何通过Uri查询和修改数据。 通过以上内容,学习...
9. **通知和服务**:介绍如何使用Notification Manager发送通知,以及后台运行Service的使用方法。 10. **多线程和异步任务**:Android应用开发中如何有效地处理多线程,避免阻塞UI线程,以及使用AsyncTask实现轻量...
5. **内容提供者ContentProvider**: - 学习ContentProvider的作用,如何与其他应用共享数据。 - 实现自定义ContentProvider,掌握UriMatcher的使用。 6. **Android权限管理**: - 掌握AndroidManifest.xml中...
9. **AsyncTask**:在Android中处理耗时操作的轻量级机制,书中会介绍如何使用AsyncTask来改善用户体验。 10. **权限管理**:Android系统的权限模型,如何在Manifest文件中声明和处理权限请求。 此外,书中的实例...
- **内容提供者(Content Provider)**:用于跨应用数据共享。 #### 7. Activity的启动模式 - **standard**:每次启动都会创建一个新的实例。 - **singleTop**:当Activity位于栈顶时,不再创建新的实例。 - **...
3. **Android应用程序结构**:了解Android应用的基本结构至关重要,包括Manifest文件、Activity、Service、BroadcastReceiver和ContentProvider等组件的使用方法。 4. **UI设计**:书中将详细介绍如何使用XML布局...
- **线程基础:**介绍了Android中线程的概念和使用方法。 - **Handler机制:**讲解了如何使用Handler来实现在主线程和其他线程之间的消息传递。 - **异步任务:**介绍了AsyncTask类,这是一种简化多线程操作的有效...
9. **第三方库的使用**: - **Dagger2**:依赖注入框架,简化对象的创建和依赖关系管理。 - **Butter Knife**:视图绑定库,减少findViewById()的使用。 - **RxJava**:响应式编程库,处理异步操作和事件流。 10...
9. **Android Studio与Gradle** - **Android Studio使用**:理解项目结构,使用调试工具,集成第三方库等。 - **Gradle构建系统**:掌握Gradle脚本编写,理解依赖管理和构建过程。 10. **Android新特性** - **...
4. **数据存储**:Android提供了多种数据存储方式,包括SharedPreferences、SQLite数据库、ContentProvider等。源码可能包含如何读写数据、管理数据库操作的实例。 5. **BroadcastReceiver**:广播接收器用于监听...
【eoeAndroid特刊】是针对Android开发者的系列专题,主要涵盖了从2011年9月5日之前发布的20期内容。这些特刊深入探讨了Android平台的各种技术和趋势,旨在帮助开发者提升技能,了解最新的Android发展动态。以下是各...