关于ContentProvider(初识篇)

ContentProvider是Android四大组件之一,用于系统中APP之间的联动与数据交换。

ContentProvider提供了6种方法可供开发者重写:

public boolean onCreate();

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder);

public String getType(Uri uri) ;

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);

分别对应数据库的表的创建、判断类型、查、增、删、改。

使用方法:


1、新建类并继承ContentProvider

public class ProvideHelper extends ContentProvider {

2、将需要改写的6种方法放入该类中

 public boolean onCreate() {        return false;
    }
    @Override
    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        return null;
    }
    @Override
    public String getType(Uri uri) {
        return null;
    }
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {       return 0;
    }
    @Override
    public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
        return 0;
    }

3、配置AndroidManifest文件

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <provider
            android:authorities="fish.lsy.provide.work"
            android:name=".ProvideHelper"
            android:exported="true"/>

  其中,android:authorities即是其他类找到该类的地址;android:name即是这个provider类的名称;android:exported表示该类的方法能否被其他应用调用,选true就是可以。

4、在另一个软件中使用这些方法

1)申明ContentResolver

 ContentResolver contentResolver;

2)建立变量储存Uri地址

Uri uri = Uri.parse("content://fish.lsy.provide.work/");

  PS:这里前面是要加"content://"的,后面的可照AndroidManifest中的android:authorities复制并加上"/"

3)调用contentResolver的方法

result = contentResolver.delete(uri,"name",null);

  contentResolver根据uri即可找到相应的应用,对其进行该应用所提供的操作。

5、其实,ContentProvider的6个方法只是构建了数据库方便使用的输入输出模式,方法的实现完全由开发者自定义和数据库毫无关系。

  但是,往往一个应用,不会只有一个表,因此,我们要为不同的表设置不同的操作。Android框架为我们提供了一个方便的类 UriMatcher我们可以通过它的方法来匹配Uri。

接上面的使用步骤

6、申明static的UriMatcher,并预设Uri地址和其中的表。

private static UriMatcher uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    static{
        uriMatcher.addURI("fish.lsy.provide.work","work1",1);
        uriMatcher.addURI("fish.lsy.provide.work","work2",2);
    }

  其中,UriMatcher.NO_MATCH为预设的常量-1,即当找不到匹配的Uri时,即会返回该值;而addURI的第三个参数,则是表示当Uri匹配成功时,返回的数值,据此我们可以对不同的匹配结果加以区分。

7、在ContentProvider对应的方法中对传来的Uri作判断。

public int delete(Uri uri, String selection, String[] selectionArgs) {
        switch (uriMatcher.match(uri)){
            case 1:
                if(selection.equals("lsysb")){
                    return 233;
                }
                return 111;
            case 2:
                if(selection.equals("xxysb")){
                    return 2333;
                }
                return 222;
            default:
                throw new IllegalArgumentException();
        }
    }

综上,ContentProvider为其他应用提供了操作本应用的方法,可以实现应用间的数据共享和操作。

时间: 2024-08-24 10:39:47

关于ContentProvider(初识篇)的相关文章

中间件学习——初识篇

最近这段时间正在学习中间件的内容,从这篇文章开始我们开始学习中间件的相关内容. 发展概述 在学习中间件知识之前我们先了解下软件开发技术的发展,从软件开发技术的一步步发展中慢慢的衍生出了中间件的技术,现在我们开始依次介绍软件开发技术的发展. 1.基于主机的系统 基于主机的系统最开始的时候是只有硬件和程序组成的,这时候的程序还没有分操作系统和应用程序,经过长时间的发展,人们慢慢的发现程序中有稳定的成分那就是计算资源管理这部分,人们根据程序的稳定成分也可以说是共性成分,这部分共性成分也就是操作系统,人

构建之法---初识篇(团队、流程和敏捷流程)

这周主要是看了第五章和第六章,主要内容包括团队和流程以及敏捷流程. 首先来说什么是团队?团队有一个集体的目标,团队要一起完成这个目标,一个团队的人,不一定要同时工作,团队成员有各自的分工,互相依赖合作,共同完成任务.此外,团队的模式也是多种多样的,我觉得不管什么样的流程,只要有一个合理的机制,有一个合理的规则就是可以的,我觉得还是要有一个人去领导整个团队,其实对于现在的我来说,我更喜欢主治医师模式.但是必须保证大家不是打酱油的,要每个人都有贡献. 关于开发流程,瀑布模型是单项的,不可逆的生产过程

构建之法---初识篇(软件工程和个人测试)

这周学习了构建之法的前两章的内容,关于软件工程的介绍以及关于个人测试的重要性. 首先说一下软件工程,一开始觉得软件工程是一个很庞大的任务,在做一个项目的时候,像我们这种小白,心里面还是尽力的想要避开软件工程的复杂步骤,只想着做代码的实现,然后进一步的测试测试就好,但是看了第一章的内容以后呢,觉得软件工程必须按照步骤来,而且代码实现好像并不是占比重最大的部分.一个良好的软件工程是需要一个和谐的团队的共同作业的,但是在这个团队做出一个项目之前,我们首先要做的应该是先成为一个合格的软件工程师,所以了解

thinkPHP框架之初识篇

安装框架 XAMPP:XML.Apache.MySQL.PHP.PERL LAMP : Linux.Apache.MySQL.PHP LNMP :Linux.Ningx.MySQL.PHP J2EE : 贵 linux命令 1.关闭系统自带apache sudo /usr/sbin/apachectl stop 2.查看Apache系统进程 ps -ef | grep httpd 3.查看MySQL进程 ps -ef | grep mysql 4.查看PHP版本 php -version 5.显

Cookie初识篇

一.什么是Cookie Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109和2965都已废弃,最新取代的规范是RFC6265[1]  .(可以叫做浏览器缓存) Cookie时间 Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器(前提是浏览器设

初识篇-----人、绩效和职业道德

这周看了最后一章,人.绩效.职业道德.了解到了绩效管理的几种办法,RASCI模型,团队成长的几个阶段,IEEE软件工程师的道德规范. 先说绩效管理的几种办法,最有效的方法是二维评价体系:完成任务维度和团队任务维度两个方面评价.团队成长的几个阶段:萌芽阶段(交流少,对未来的软件未知):磨合阶段(出现争议,引发争端),规范阶段(大家交流融洽,协同作战),创造阶段(有目标,责任分工明确,高度自治).这几个阶段中,进入创造阶段的很少,我觉得我们现在还处在萌芽和磨合之间,对我们软件已经有一定的认识了,但是

构建之法---初识篇(项目经理和典型用户)

这周主要是项目经理和典型用户场景这两章的内容的学习,了解一个项目经理的责任和义务,了解一个项目经理应该具备的能力是什么,了解什么是典型用户,能够真正挖掘用户的需求,然后进行典型用户的练习. 关于项目经理这一章,其实首先他要是多变的,要懂得从不同的角度去看问题,要了解作为一个用户对软件的需求是什么,要了解作为一个程序员要以什么样的形式将用户的需求完美的表现出来,综合来说就是有观察,理解和快速学习的能力,我个人认为自己这方面的能力还是可以的.再有一个就是让人很头疼的能力,分析管理的能力,一个项目经理

构建之法----初识篇(MSF和需求分析)

这周了解了七八章的内容,关于MSF和需求分析. 先说MSF 吧,MSF是Microsoft  solution   framework  的简称,译为微软解决方案框架.它包含了九条基本原则,我觉得吧这九条是环环相扣的,如果团队中的每个成员都可以按照这个框架的原则去要求的话,那么工作一定是高效的,有意义的.这个基本原则加强的是团队之间的沟通能力,把所有资源同时共享,避免了因为沟通不当而导致出错.我觉得他在敏捷的基础上又多了一些经验的总结,可以更多的避免错误,同时比敏捷多了几分自由度. 再说需求分析

Android网络框架OkHttp之get请求(源码初识)

概括 OkHttp现在很火呀.于是上个星期就一直在学习OkHttp框架,虽然说起来已经有点晚上手了,貌似是2013年就推出了.但是现在它版本更加稳定了呀.这不,说着说着,OkHttp3.3版本在这几天又发布了.以下以OkHttp3.2版本为准,没办法,上个星期看的时候还是以3.2为最新版本的.首先,我们要先了解一些背景,OkHttp这个框架是有Square公司推出的,进入官网.如果想看API,点击进入API.大概了解了OkHttp之后,我们应该知道OkHttp是一个网络框架,想想以前在开发中,网