第九天 Android学习总结(内容提供者)

本文详细介绍了Android中的内容提供者(ContentProvider)概念,包括为何需要内容提供者、其工作原理及如何实现基本的增删查改操作。此外,还提供了具体的短信备份和联系人信息查询、插入的例子。

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

内容提供者contentprovider

1.为什么需要内容提供者?

以为直接访问数据库需要权限,而通过内容提供者我们可以把私有的数据库内容暴露出来.

2.内容提供者原理

由于数据库是私有的,外部应用不可以直接访问.在应用内部使用内容提供者,向外部暴露接口,这样外部应用可以借助“中间人”访问到内部的数据库.

3内容提供者的创建

(1)创建一个类继承ContentProvider,并在清单文件中注册,两个属性,name和authorities(组成uri路径的东西).

(2)创建一个UriMatcher(uri路径匹配器)

private static final UriMatcher sURIMatcher = new UriMatcher(UriMatcher.NO_MATCH);

(3)定义一个static静态代码块,用来往uri路径匹配器中添加rui

static { // uri: authority/path =pers.wzs.provider/query
// authority:跟清单文件定义的一样即可
// path:随便写...
// code:
// 别的应用程序通过uri访问对应的方法,一个uri对应一个方法,code用于匹配验证
sURIMatcher.addURI("pers.wzs.provider", "query", QUERYSUCCESS);
}

(4)获取数据库对象,重写增删查改方法

@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
int code = sURIMatcher.match(uri);
if (code == QUERYSUCCESS) {
// 说明路径匹配成功,调用query方法
SQLiteDatabase db = mySQLiteOpenHelper.getReadableDatabase();
Cursor cursor = db.query("info", projection, selection, selectionArgs, null, null, sortOrder);
// 小细节:★这个db和cursor不能关闭
return cursor;
} else {
// 路径不匹配
throw new IllegalArgumentException("哥们,uri路径不匹配,请检查路径");
}
}

查询方法中不可以关闭db.cursor游标对象

4.通过内容提供者进行数据库的增删查改操作

(1)创建uri路径

Uri uri = Uri.parse("content://authorities的值/path的值");

(2)获得内容解析者,进行操作

Cursor cursor = getContentResolver().query(uri, new String[]{"name","money"}, null, null, null);


短信备份例子:

通过内容解析者获取短信数据

Uri uri = Uri.parse("content://sms/");//authorities和path在系统源码中找,先看清单文件中provider,再找java文件中的UriMatcher匹配器,静态代码块中的uri

Cursor cursor = getContentResolver().query(uri, new String[]{"address","date","body"}, null, null, null);



联系人信息查询,插入例子:

表和表之间存在关系时....(数据库的知识忘得一干二净了),要查询联系人的data表获取信息,得先查出其外键raw_contact_id表中的contact_id的值.再根据contact_id值查询一个联系人信息

要插入联系人信息时,得先查询raw_contact_id表中数据数量,+1就是新添加的联系人信息的contact_id值,先往raw_contact_id表添加contact_id数据,才可以根据contact_id的值,往data表中添加data1属性数据.添加数据时mimetype类型属性得一起添加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值