Android 中ContentProvider内容提供者和ContentResolver内容访问者

本文详细介绍了如何使用Android的ContentProvider实现应用间的数据共享。通过继承ContentProvider类并重写相应方法,可以创建一个提供数据访问的组件。文章还展示了如何在AndroidManifest.xml中配置权限以及如何从其他应用查询和修改数据。

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

	今天利用空闲时间研究了下ContentProvider,当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据。
 
@Override
public boolean onCreate() {
    DbHelper dbHelper=new DbHelper(getContext(),"person.db",null,2);
    sqLiteDatabase = dbHelper.getReadableDatabase();
    //匹配器
    uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
    uriMatcher.addURI("com.example.g0825_android_16.PERSONS","persons",1);
    uriMatcher.addURI("com.example.g0825_android_16.PERSONS","persons/#",2);
    return false;
}

@Nullable
@Override
public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1) {
    int type=uriMatcher.match(uri);
    switch (type){
        //所有
        case 1:
            return sqLiteDatabase.query(false,"person",strings,s,strings1,null,null,s1,null);
        case 2:
            long id=ContentUris.parseId(uri);
            return sqLiteDatabase.query(false,"person",strings,"_id=?",new String[]{id+""},null,null,s1,null);
    }
        return null;
}

@Nullable
@Override
public String getType(Uri uri) {
    return null;
}

@Nullable
@Override

 

public Uri insert(Uri uri, ContentValues contentValues) { Log.i("test","insert"); contentValues.get("name"); contentValues.get("age"); sqLiteDatabase.insert("person","name",contentValues); return null; } @Override public int delete(Uri uri, String s, String[] strings) { return sqLiteDatabase.delete("person",s,strings); } @Override public int update(Uri uri, ContentValues contentValues, String s, String[] strings) { return sqLiteDatabase.update("person",contentValues,s,strings); }
 
2.在AndroidManifest.xml中配置
<provider
    android:authorities="com.example.g0825_android_16.PERSONS"
    android:name="com.zking.provider.MypersonProvider"
    android:exported="true"
    ></provider>
 
3.接收者中的代码
 
public void onClick(View view) {
    //判断输入框是否为空
    if(TextUtils.isEmpty(et_main_id.getText().toString())){
        //查询所有
        //协议   http://www.baidu.com
        //content://
        uri = Uri.parse("content://com.example.g0825_android_16.PERSONS/persons");
    }else{
        //查询单个
        String id=et_main_id.getText().toString();
        uri = Uri.parse("content://com.example.g0825_android_16.PERSONS/persons/"+id);
    }
    //访问数据
    Cursor cursor=cr.query(uri,null,null,null,null);
    while(cursor.moveToNext()){
        int pid=cursor.getInt(cursor.getColumnIndex("_id"));
        String name=cursor.getString(cursor.getColumnIndex("name"));
        int age=cursor.getInt(cursor.getColumnIndex("age"));
        Toast.makeText(MainActivity.this, pid+" "+name+" "+age, Toast.LENGTH_SHORT).show();
    }
}
 
 
//解析布局文件
View v=getLayoutInflater().inflate(R.layout.dialog_listview,null);
et_dialog_listview_name = (EditText) v.findViewById(R.id.et_dialog_listview_name);
et_dialog_listview_age = (EditText) v.findViewById(R.id.et_dialog_listview_age);
((Button)v.findViewById(R.id.btn_dialog_listview_sure)).setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        String name=et_dialog_listview_name.getText().toString();
        String age=et_dialog_listview_age.getText().toString();
        ContentValues contentValues=new ContentValues();
        contentValues.put("name",name);
        contentValues.put("age",age);
        uri = Uri.parse("content://com.example.g0825_android_16.PERSONS");
        cr.insert(uri,contentValues);
        Toast.makeText(MainActivity.this, "执行添加操作", Toast.LENGTH_SHORT).show();
        dialog.dismiss();//关闭当前的对话框
    }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值