ContentProvider01

来源:互联网 发布:标签设计软件哪种好 编辑:程序博客网 时间:2024/05/21 10:11

ContentProvider概述:

ContentProvider向我们提供了我们在应用程序之前共享数据的一种机制,而我们知道每一个应用程序都是运行在不同的应用程序的,数据和文件在不同应用程序之间达到数据的共享不是没有可能,而是显得比较复杂,而正好Android中的ContentProvider则达到了这一需求,比如有时候我们需要操作手机里的联系人,手机里的多媒体等一些信息,我们都可以用到这个ContentProvider来达到我们所需。

我们以一个网站来形象的描述这个ContentProvider吧,可以这么理解为ContentProvider就是一个网站,它向我们去访问网站这里的数据达到了一种可能,它就是一个向外提供数据的接口。那么既然它是向外提供数据,我们有时候也需要去修改数据,这时我们就可以用到另外一个类来实现这个对数据的修改ContentResolver类,这个类就可以通过URI来操作数据。

实现ContentProvider

1、 编写一个实现ContentProvider的在,这个子类必须要实现一些必须实现的方法,在ContentProvider类里面,有一系列针对于数据的增、删、改、查等方法

2、 ContentProvider也是Android中的四大组件,因此也必须在AndroidMainfest.xml中完成对ContentProvider的注册。

Uri

从Uri谈起

什么是Uri?

Uri是指通用资源标志符

A:前缀表明数据受控于一个内容提供者。它从不修改,也就是schema

B:是指在AndroidMainfest.xml中我们注册的provider中的android:authorities属性所对应的

C:具体操作于哪个条目

D:具体指定到哪个条目下的哪条记录

 

通用资源标志符(Universal Resource Identifier, 简称"URI")。

Uri代表要操作的数据,Android上可用的每种资源 - 图像、视频片段等都可以用Uri来表示。

我们很经常需要解析Uri,并从Uri中获取数据。

Android系统提供了两个用于操作Uri的工具类,分别为UriMatcher 和ContentUris

UriMatcher

初始化:

UriMatcher sMatcher = new UriMatcher(UriMatcher.NO_MATCH);

第二步注册需要的Uri:

sMatcher.addURI("com.test.myprovider", "person", 1);
sMatcher.addURI("com.test.myprovider", "person/#", 2);

第三部,与已经注册的Uri进行匹配:

  switch (sMatcher.match(Uri .parse("content://com.test.myprovider/person"))) {
      case 1:
                System.out.println("1");
       break;

      case 2:
               System.out.println("2");
      break;

     default:// 不匹配
              System.out.println("default");
     break;

  }

match方法匹配后会返回一个匹配码Code,即在使用注册方法addURI时传入的第三个参数。

总结:
--常量 UriMatcher.NO_MATCH 表示不匹配任何路径的返回码
--# 号为通配符
--* 号为任意字符

ContentUris

1)为路径加上ID: withAppendedId(uri, id)

Uri uri2 = ContentUris.withAppendedId(uri, 10);

2)从路径中获取ID: parseId(uri)

long id = ContentUris.parseId(uri2);

原创粉丝点击