内容提供器--2、创建内容提供器

本文介绍如何通过继承ContentProvider创建自定义内容提供器,并详细解析六个核心抽象方法:onCreate(), query(), insert(), update(), delete(), getType()。文章还介绍了如何使用UriMatcher进行内容URI匹配,以及如何根据不同URI返回相应的MIME类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、新建一个类去继承 ContentProvider 的方式来创建一个自己的内容提供器
2、ContentProvider 类中有六个抽象方法,我们在使用子类继承它的时候,需要将这六个方法全部重写。

  • onCreate()
  • query()
  • insert()
  • update()
  • delete()
  • getType():根据传入的内容URI来返回相应MIME类型

3、借助UriMatcher这个类可轻松实现匹配内容URI的功能, UriMatcher提供 addURI()方法,把权限,路径和自定义代码传进去。
通配符:
content://com.example.app.provider/*
*表示匹配任意长度的任意字符
content://com.example.app.provider/table1/#
表示匹配任意长度的数字

public static final int TABLE1_DIR = 0;
public static final int TABLE1_ITEM = 1;
public static final int TABLE2_DIR = 2; 
public static final int TABLE2_ITEM = 3;
private static UriMatcher uriMatcher;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI("com.example.app .provider", "table1", TABLE1_DIR);
uriMatcher.addURI("com.example.app.provider  ", "table1/#", TABLE1_ITEM);
uriMatcher.addURI("com.example.app.provider ", "table2", TABLE2_ITEM);
uriMatcher.addURI("com.example.app.provider  ", "table2/#", TABLE2_ITEM);
}

4、根据调入的URI返回table表中的数据

@Override
public Cursor query(Uri uri, String[] projection, String selection, 
String[] selectionArgs, String sortOrder) {
switch (uriMatcher.match(uri)) {
case TABLE1_DIR:
// 查询table1表中的所有数据
break;
case TABLE1_ITEM:
// 查询table1表中的单条数据
break;
case TABLE2_DIR:
// 查询table2表中的所有数据
break;
case TABLE2_ITEM:
// 查询table2表中的单条数据
break;
default:
break;
}

5、使用getType()方法,用于获取 Uri 对象所对应的 MIME 类型字符串。

  • vnd开头
  • 内容URI以路径结尾android.cursor.dir/,内容URI以id结尾,android.cursor.item/
  • 接上 vnd..
    content://com.example.app.provider/table1
    对应
    vnd.android.cursor.dir/vnd.com.example.app.provider.table1
@Override
public String getType(Uri uri) {
switch (uriMatcher.match(uri)) {
case TABLE1_DIR:
return "vnd.android.cursor.dir/vnd.com.example.app.provider.
table1";
case TABLE1_ITEM:
return "vnd.android.cursor.item/vnd.com.example.app.provider.
table1"; 
case TABLE2_DIR:
return "vnd.android.cursor.dir/vnd.com.example.app.provider.
table2";
case TABLE2_ITEM:
return "vnd.android.cursor.item/vnd.com.example.app.provider.
table2";
default:
break;
}
return null;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值