android四大组件之ContentProvider个人总结

来源:互联网 发布:网络口碑双刃剑图片 编辑:程序博客网 时间:2024/05/16 15:54

对于郭神的第一行代码的摘录

ContentProvider(内容控制器)主要提供在不同应用程序之间实现数据共享的功能,允许一个应用程序访问另一个应用程序中的数据,同时还能保证被访问数据的安全性。

ContentProvider 的用法分为两种:


1.使用context的getContentResolver()方法获得一个ContentResolver对象,使用该对象的qurey、insert、update以及delete等方法。

内容Uri最标准的格式的写法:

content://com.example.app.provider/table1

com.example.app.provider是权限

/table是路径

以上还只是一个URI字符串,需要通过

Uri uri = Uri.parse("content://com.example.app.provider/table1")将内容URI字符串解析成Uri对象。

1.查询:(使用getContentResolver获得ContentResolver对象,使用其query方法获得cursor对象,cursor对象完成查询操作)

使用:Cursor cursor = getContentResolver().query(uri,projection,Selection,SelectionArgs,sortOrder);

获得一个cursor对象,String column1 = cursor.getString(cursor.getColumnIndex("column1"));就可以完成查询操作。

2.添加数据:(使用getContentResolver获得ContentResolver对象,使用其insert方法将ContentValues添加进去)

ContentValues values = new ContentValues();

values.put("column1", "text");

getContentResolver().insert(uri.values);

3.更新数据(把column1里面的内容清空)

ContentValues values = new ContentValues();

values.put("column1", “”);

getContentResolver().update(uri, values,"column1= ?and column2 = ?", new String[] {"text", "1"});

//前面刚往column1里面添加了text,这里update一下

4.删除数据

getContentResolver().delete(uri, "column2 = ?", new String[] {"1"});

到此,ContentResolver的内容全部结束。


下面开始讲自定义ContentProvider的内容,参考郭神代码以及各路CSDN大神的代码。



2.创建自己的内容控制器为我们的程序的数据提供外部访问接口(extends ContentProvider)。

ContentProvider是一个抽象类,里面包含了6个abstract method,必须实现这六个方法。

此外还需要在AndroidManifest文件里使用<provider/>对该ContentProvider进行配置

<manifest.... >   <application android:icon="@drawable/icon" android:label="@string/app_name">      <provider android:name=".PersonContentProvider"            android:authorities="com.ljq.providers.personprovider"/>   </application></manifest>
contentProvider采用了authorities(主机名/域名)对它进行唯一标识。


粗略的认识就是:

1新建一个项目,建一个myDatabaseProvider类 extends ContentProvider,实现后者的六个抽象方法,这六个抽象方法都会根据传入的Uri对象执行相应的操作

这些操作全都写在实现的逻辑里。

以query为例

在实现public Cursor query()会返回一个Cursor对象,在后面的MainActivity里面就会根据这个Cursor对象执行cursor.getString()操作。。。等等

注意,主程序会传一个URI字符串进去,parse成Uri对象,先getContentResolver().query(XXXXX)//contentProvider对象的各种方法都需要传Uri对象进去才能执行。

返回Cursor也好,直接对table进行update,delete也好,都是需要uri参数的。

所以,只要知道了com.example.app.provider/table1就可以对表进行操作了。

例如com.example.Activity1里的数据库就可以暴露给com.example.Activity2的程序使用,后者只要知道了这个Uri(权限),就可以对别的程序里面的数据进行操作。

这也就是所谓数据共享的意思。


0 0
原创粉丝点击