ContentProvider内容提供者与ContentResolver内容访问者

  刚好接触到ContentProvider内容提供者与ContentResolver内容访问者,对它进行了一个初步的了解,它主要用于不同的应用程序之间实现数据的共享,允许一个程序访问另一个程序,还可以保证数据的安全。


以下是我写的一个简单的ContentProvider与ContentResolver的一个列子:

首先创建两个dome分别为android1和android2。android1为内容提供者,android2为内容访问者,在android1中创建类ContentProvi继承ContentProvider实现六个方法:


public class ContentProvi extends ContentProvider {

    private DbHelper dbHelper;
    private SQLiteDatabase sqLiteDatabase;

    @Override
    public boolean onCreate() {
        dbHelper = new DbHelper(getContext(),"person.db",null,2);
        sqLiteDatabase = dbHelper.getReadableDatabase();
        return false;
    }
	//查询
    @Nullable
    @Override
    public Cursor query(Uri uri, String[] strings, String s, String[] strings1, String s1){

      return sqLiteDatabase.query(false,"person",strings,s,strings1,null,null,s1,null);
}

    @Nullable
    @Override
    public String getType(Uri uri) {
        return null;
    }
	//添加
    @Nullable
    @Override
    public Uri insert(Uri uri, ContentValues contentValues) {
        sqLiteDatabase.insert("person","name",contentValues);
        return null;
    }
	//删除
    @Override
    public int delete(Uri uri, String s, String[] strings) {
        sqLiteDatabase.delete("person",s,strings);
        return 0;
    }
	//修改
    @Override
    public int update(Uri uri, ContentValues contentValues, String s, String[] strings) {
       sqLiteDatabase.update("person",contentValues,s,strings);
        return 0;
    }

在android1中的清单文件AndroidManifest.xml需要进行以下配置:

	<provider
		//可以自己定义
android:authorities="com.example.android_15.1" 
		//提供者中继承了ContentProvider 的类名路径
android:name="com.example.android_15.ee.ContentProvi" android:exported="true" ></provider>

在android2中通过

		ContentResolver cr = getContentResolver();
	实例化对象ContentResolver通过ContentResolver实现
	以下是实现的基础的增删改查
	查询:
	//uri中的值在需要满足content://协议后面的为你在内容提供者配置文件AndroidManifest.xml中
	authorities定义的名字
	uri = Uri.parse("content://com.example.android_15.1");
	Cursor c=cr.query(uri,null,null,null,null);
	while (c.moveToNext()){
    		int id=c.getInt(0);
    		String name=c.getString(1);
    		int page=c.getInt(2);
    		Toast.makeText(MainActivity.this,name+ "", Toast.LENGTH_SHORT).show();
	}
	增加:
	
	String name=et_main_name.getText().toString();
	int age=Integer.parseInt(et_main_age.getText().toString());
	uri = Uri.parse("content://com.example.android_15.1");
	//保存到数据库中
	ContentValues values=new ContentValues();//Map
	values.put("name",name);
	values.put("age",age);
	values.putNull("_id");
	cr.insert(uri,values);
	删除:
	
	int id=Integer.parseInt(et_main_id.getText().toString());
	uri = Uri.parse("content://com.example.android_15.1");
	cr.delete(uri,"_id=?",new String[]{id+""});
	修改:
		
	uri = Uri.parse("content://com.example.android_15.1");
	//保存到数据库中
	ContentValues values=new ContentValues();//Map
	values.put("name",name);
	values.put("age",age);
	cr.update(uri,values,"_id=?",new String[]{id+""});
	

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值