Android 之ContetProvider

本文详细介绍了一个基于Android平台的ContentProvider实现案例,包括如何在清单文件中配置内容提供者、定义路径匹配规则、处理数据查询请求等核心步骤。此外,还展示了如何在客户端应用中通过ContentResolver进行数据查询。

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

1.提供的程序在清单文件application中配置

 <provider 
            android:name="cn.itcast.db.provider.PersonProvider"
            android:authorities="cn.itcast.db.personprovider"//定义主机名
 ></provider>


2.提供者的类继承ContentProvider 

public class PersonProvider extends ContentProvider {
//创建了一个路径的识别器 uriMatcher默认的返回值,如果没有找到匹配的类型 返回-1
public static final UriMatcher matcher=new UriMatcher(UriMatcher.NO_MATCH);
public static final int ALL_PERSONS=1;
public static final int PERSON=2;
public static final int HAHA=3;
private static final String TAG="PersonProvider";
static{
// 主机名路径
matcher.addURI("cn.itcast.db.personprovider","persons", ALL_PERSONS);
//指定一个路径的匹配规则
//如果路径满足content://cn.itcast.db.personprovider/persons 返回值就是 1(ALL_PERSONS)
matcher.addURI("cn.itcast.db.personprovider", "person/#", PERSON);
//如果路径满足content://cn.itcast.db.personprovider/person/10 返回值就是 (PERSON) 2
matcher.addURI("cn.itcast.db.personprovider", "haha", HAHA);
}
/**
* personProvder内容提供者第一次被创建的时候调用的方法
*/
public boolean onCreate() {
return false;
}


@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {

int result= matcher.match(uri);
switch(result){
case ALL_PERSONS:
PersonDBDao dao=new PersonDBDao(getContext());
return dao.findAllbyCursor();
//content://cn.itcast.db.personprovider/person/10
case PERSON:
long id=ContentUris.parseId(uri);
MyDBOpenHelper openHelper=new MyDBOpenHelper(getContext());
SQLiteDatabase db=openHelper.getReadableDatabase();
if(db.isOpen()){
Cursor cursor=db.query("person", null, "personid=?", new String[]{id+""}, null, null, null);
return cursor;
}
case HAHA:
Log.i(TAG,"我是haha对应的路径");
default:
throw  new IllegalArgumentException("uri 不能被识别");
}
}

3.接受者

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_other);
Uri uri = Uri.parse("content://cn.itcast.db.personprovider/person/10");
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(uri, null, null, null, null);
while (cursor.moveToNext()) {
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
System.out.println("姓名" + name + "年龄" + age);


}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值