Android-ContentProvider实例详解,面试官问的那些Android原理你都懂吗

本文详细解析了Android的ContentProvider,包括URI结构、URI模式匹配、MIME类型、ContentUris和UriMatcher的使用,以及ContentProvider的主要方法。通过实例介绍了如何通过ContentResolver操作ContentProvider,并利用ContentObserver监听数据变化。内容适合于Android开发者,特别是面试准备。
摘要由CSDN通过智能技术生成

在Android中URI的格式如下图所示:

  • A:schema,已经由Android所规定为:content://.

  • B:主机名(Authority),是URI的授权部分,是唯一标识符,用来定位ContentProvider。

C部分和D部分:是每个ContentProvider内部的路径部分

  • C:指向一个对象集合,一般用表的名字,如果没有指定D部分,则返回全部记录。

  • D:指向特定的记录,这里表示操作user表id为7的记录。如果要操作user表中id为7的记录的name字段, D部分变为 /7/name即可。

URI模式匹配通配符
:匹配的任意长度的任何有效字符的字符串。
#:匹配的任意长度的数字字符的字符串。
如:
content://com.example.app.provider/
 
匹配provider的任何内容url
content://com.example.app.provider/table3/#
匹配table3的所有行

####MIME

MIME是指定某个扩展名的文件用一种应用程序来打开,就像你用浏览器查看PDF格式的文件,浏览器会选择合适的应用来打开一样。Android中的工作方式跟HTTP类似,ContentProvider会根据URI来返回MIME类型,ContentProvider会返回一个包含两部分的字符串。MIME类型一般包含两部分,如:

text/html 
text/css 
text/xml 
application/pdf

分为类型和子类型,Android遵循类似的约定来定义MIME类型,每个内容类型的Android MIME类型有两种形式:多条记录(集合)和单条记录。

集合记录:

vnd.android.cursor.dir/自定义

单条记录:

vnd.android.cursor.item/自定义

vnd表示这些类型和子类型具有非标准的、供应商特定的形式。Android中类型已经固定好了,不能更改,只能区别是集合还是单条具体记录,子类型可以按照格式自己填写。

在使用Intent时,会用到MIME,根据Mimetype打开符合条件的活动。

下面分别介绍Android系统提供了两个用于操作Uri的工具类:ContentUris和UriMatcher。

####ContentUris

ContetnUris包含一个便利的函数withAppendedId()来向URI追加一个id。

Uri uri = Uri.parse(“content://cn.scu.myprovider/user”)

Uri resultUri = ContentUris.withAppendedId(uri, 7); 
//生成后的Uri为:content://cn.scu.myprovider/user/7

同时提供parseId(uri)方法用于从URL中获取ID:

Uri uri = Uri.parse(“content://cn.scu.myprovider/user/7”)
long personid = ContentUris.parseId(uri);
//获取的结果为:7

####UriMatcher

UriMatcher本质上是一个文本过滤器,用在contentProvider中帮助我们过滤,分辨出查询者想要查询哪个数据表。

举例说明&#x

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值