感谢chenzheng提供的文章讲解,此文转载http://blog.csdn.net/chenzheng_java/archive/2011/03/08/6232632.aspx
该系统有两个应用,比较繁琐。但是内容提供者是android里非常非常重要的一个内容,我们得好好学习下哦。先看效果图,我们提供了四个按钮,点击按钮便会进行相应的操作。
想说的话,在代码的注释中已经说的很清晰了。这里再次重复下我们定义和使用内容提供者的步骤吧。
定义内容提供者:
我们定义内容提供者的目的是什么,共享数据,对,定义内容提供者的目的就是让别的应用能够访问当前应用的一些数据,至于到底暴露给外界什么数据,我们可以在定义内容提供者的时候详细控制!不管如何,我们明确了第一个问题,定义内容提供者的目的----数据共享!
我们平时对数据的操作都有哪些?增删改查!就四个字!这也是为什么我们再定义内容提供者的时候必须要实现相应的方法了。当然如果你要是不想提供相应的操作,你可以在内部进行方法空实现。
是不是所有的应用都可以访问我啊?不可能!我们可不是随便的人,对吧!所以我们要进行验证,验证不通过的直接让它去死就可以了。验证怎么验证啊?通过UriMatcher进行匹配!
现在我们已经提供了访问接口了,我们怎么让系统知道,别的应用可以用我的东西啊?去配置文件中注册!!
使用内容提供者:
如何找到该内容提供者啊?需要Uri和相应的访问权限。相当于地址
如何进行增删查改啊?通过ContentResolver对象的相应方法。
SQLiteDatabase的几个重要方法的参数列表
public long insert (String table, String nullColumnHack, ContentValues values)
table:表名;
nullColumnHack:设置为null;
valuse:你要插入的值,类型为ContentValues。
public int update (String table, ContentValues values, String whereClause, String[] whereArgs)
table:表名;
values:你需要更新个数据组成的一个map,由列的名字和列的新值构成,null是合法的值,会被转化为NULL;
whereClause:更新的条件,为一个字符串。如果为null,则所有行都将更新;
whereArgs:字符串数组,和whereClause配合使用。有两种用法,如果whereClause的条件已经直接给出,如“class = “ + num,num是传入的参数,则whereArgs可设为null。如果是”class = ?“,则?会被whereArgs这个数组中对应的值替换,whereArgs给出?代表的值,有多个?的,字符串数组里的值依次填入。
public int delete (String table, String whereClause, String[] whereArgs)
table:表名;
whereClause:删除的条件,用法和update里的一样。如果为null,则删除全部行。
whereArgs:用法和update里的一样。
public Cursor query (String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
table:表名;
culumns:需要返回的列的列表,如果为null,则返回全部的列;
selection:查询的条件,符合什么条件的行将返回。如果为null,则这个表里的所有行都将返回。其两种用法和update里的一样;
selectionArgs:用法和update里的一样。
注:
1.selection中的条件,不是用“,”分隔的,而是用“and”等逻辑关系词分隔的。
2.Cursor一点要记得close();
两个工程见附件:(回头在研究)
注意:
1,ContentAccessActivity,通过访问内容提供者进行增删查改.注意本程序中为了方便阅读,
在需要数据库列名的地方直接写上了数据库中字段的名称,实际上这是不合理的,
作为内容提供者的使用者,我们不可能在使用这个内容提供者之前先去了解sqlite
中表的结构。比较适宜的做法是,在内容提供者中将愿意提供给外部访问的字段名称(列名)
定义为string final 的常量!
2,MyContentProvider
第一:我们要有一个uri,这就相当于我们的网址,我们有了网址才能去访问具体的网站
第二:我们去系统中寻找该uri中的authority(可以理解为主机地址), 只要我们的内容提供者在manifest.xml文 件中注册了,那么系统中就一定存在。
第三:通过内容提供者内部的uriMatcher对请求进行验证(你找到我了,还不行,我还得看看你有没有权限访问我呢)。
第四:验证通过后,就可以调用内容提供者的增删查改方法进行操作了
3, 内容提供者是什么?内容提供者相当于一个封装好了增删改查操作的接口,这个接口有一把锁,只有携带钥匙的访问者才能访问,MyContentProvider继承ContentProvider实现相关操作,提供一个URI供ContentAccessActivity访问
ContentResolver是什么?ContentResolver是一个开锁匠,他携带者钥匙(钥匙上有标签显示他是那个门得钥匙,如path_chenzheng) 去寻找内容提供者,然后访问内容提供者的增删查改方法,我们这里调用contentResolver的增删查改就相当于将任务交给了锁匠,然后让锁匠去找能打开的内容提供者,并且执行里面相应的方法,并将结果返回.
ContentResolver的好处在于,我们可以无视CotentProvider的具体实现,无论contentProvider里面是如何实现的,我想执行某一个操作时,所要书写的代码都是一样的。 ContentAccessActivity的resolver是通过URI进行关联后,操作MyContentProvider
4,必须两个工程同时进行
分享到:
相关推荐
在Android操作系统中,内容提供者(Content Provider)是四大组件之一,它扮演着数据共享的关键角色。内容提供者允许应用程序之间共享和访问数据,即使这些数据存储在私有数据库、文件系统或者网络中。这对于开发者...
在Android系统中,内容提供者(Content Provider)是四大组件之一,它负责在应用程序之间共享数据。内容提供者是一个接口,使得其他应用可以访问存储在特定应用中的私有数据,甚至是系统级别的数据。通过实现内容...
在Android系统中,内容提供者(Content Provider)是Android四大组件之一,它是应用程序间数据共享的主要机制。通过内容提供者,一个应用可以将自己的数据暴露给其他应用,同时也能够访问其他应用公开的数据。在这个...
在Android开发中,内容提供者(Content Provider)是Android系统中的四大组件之一,它负责管理应用程序间的数据共享。内容提供者让应用的数据可以被其他应用访问,实现了数据的跨应用共享。在这里,我们将深入探讨...
在Android系统中,内容提供者(Content Provider)是四大组件之一,它负责在应用程序之间共享数据。内容提供者是Android框架中实现数据跨应用共享的关键机制,使得一个应用的数据可以被其他应用读取或写入。这篇博文...
在Android系统中,内容提供者(Content Provider)是应用程序间数据共享的重要机制。它遵循了Android的四大组件(Activity、Service、Broadcast Receiver、Content Provider)之一的架构,使得不同的应用可以安全地...
在Android开发中,内容提供者(ContentProvider)是四大组件之一,它负责在应用程序之间共享数据。本实例将深入解析如何创建和使用一个简单的ContentProvider,同时涉及与数据库的操作。 一、ContentProvider基础 ...
【Android便签】是一款基于Android平台的小型应用程序,它展示了如何有效地利用ListView、内容提供者(Content Provider)以及SQLite数据库来实现一个功能简单的记事本应用。在这个应用中,用户可以创建、编辑和删除...
这个编程实例将深入解析如何在Android平台上开发内容提供者,帮助开发者理解其工作原理和实现步骤。 内容提供者是一种特殊的类,继承自`android.content.ContentProvider`,并实现了必要的方法来读写数据。它允许...
在Android系统中,内容提供者(ContentProvider)是四大组件之一,它扮演着数据共享与交换的关键角色。ContentProvider使得应用程序之间可以安全地共享数据,无论是应用内的数据,还是跨应用的数据。它遵循统一的URI...
本文实例讲述了Android内容提供者ContentProvider用法。分享给大家供大家参考,具体如下: PersonContentProvider内容提供者类 package com.ljq.db; import android.content.ContentProvider; import android....
5. **源码分析**:博客中可能深入解析了Android系统的内置内容提供者的源码,如联系人、日历等,帮助开发者理解其实现原理,为自定义内容提供者提供参考。 6. **工具使用**:可能提到了一些用于调试和分析内容提供...
《Android Framework精编内核解析》是一本深入探讨Android系统核心框架层的专著,它...这本书的内容可能涵盖了这些主题的详细讲解,包括源码分析、实战案例和最佳实践,对于Android开发者来说是一份宝贵的参考资料。
总的来说,《字节面试Android11.0最新Framework解析》这份资料将深入探讨这些关键组件在新版本中的变化和优化,帮助面试者和开发者了解如何在Android 11.0环境下更好地设计和优化应用程序,以适应最新的系统规范和...
2. **四大组件**:内容提供者是Android的四大组件之一,与Activity、Service和BroadcastReceiver并列。 3. **URI匹配**:内容提供者通过URI(统一资源标识符)来区分和访问数据,每个URI对应一个特定的数据集。 4....
在应用程序框架层,Android提供了丰富的API供开发者使用,如Activity、Service、BroadcastReceiver、ContentProvider等组件,它们构成了Android应用的基本构建块。书中会详细解释这些组件的工作原理和使用方式,帮助...
在这个架构中,我们可以看到 LocationManagerService 是核心组件,它负责管理所有的位置提供者,包括 GPS、网络位置和被动位置提供者。 在 LocationManagerService 中,我们可以看到 `_loadProvidersLocked` 函数,...