如何创建自己的contentprovider

如何创建自己的contentprovider

作为ANDROIDL四大组件(Compenent:Activity, Service, BreadcaseReceiver,
ContentProvider)之一的Content provider,为其它应用程序(也可以是提供该
Content provider的应用程序)提供了一个接口一致数据储存模型。通过该接口,你可以
方便地提取你想要的数据,修改或者是删除都会变得相当方便。依照ANDROI组件模型的原理,
把数据储存与数据显示分离天来,这不但提高了组件重用性,也同时提供更高的完全性(每一
个Content Provider都有自己的许可属性)。作为数据储存的后端,你可以使用有Sqlite3
保存数据,也可以使用文件系统保存,甚至是使用网络;后端的多样性给得程序的设计更富有
弹性。
今天结合自己开发的经验,总结一下实现Content Provider的几点经验,不足之处,欢迎
讨论(bangbang.song@gmail.com)


每一个实现都在从ContentProvider类继承,并实现ContentProvider的抽象函数:
delete(), insert(), query(), update(), getType()和onCreate().

代码片断: class myContentProvider extends ContentProvider {

//删除符合指定条件的记录

public int delete(Uri uri, String selection, String[] selectionArgs);

//插入一个新的记录

public Uri insert(Uri uri, ContentValues values);

// 查询符合指定条件的记录

public Cursor query(Uri uri, String[] projecttion, String selection, String[] selectionArgs, String sortOrder);

//更新条例指定条件的记录

public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs);

//基于给定uri,返回该uri表示的类型

public String getType(Uri uri);

//创建数据储存后端,如数据库,文件,网络接口等

public boolean onCreate();


......


复制代码如果使用Sqlite3作为数据后端(本例只讨论这种情况,如使用其它方法,如文件系统,网络,则大同小异),数据库的创建,
打开,更新,可以使用帮助类SQLiteHelper来完成,该类将对数据库的操作作了有效的封装,有利于我们使用。
代码片断: class youtDbHelper extends SQLiteHelper {

// 创建数据库

public void onCreate(SQLiteDatabase db);

// 更新数据库

public void onUpdate(SQLiteDatabase db, int oldVersion, int newVersion)



......

}
复制代码为方便其它应用程序与该ContentProvider通信,通常我们要提供一个公共的Uri: CONTENT_URI,其它组件正是通过这一Uri,
与ContentProvider交流。在我们的ContentProvider创建好之后,我们不直接与之打交道,而是通过ANDROID的
ContentResolver进行操作。通过ANDROID系统的自动分析,会选择一个合适的ContentProvider进行通信。只要我们指定
我们之前定义的CONTENT_URI,就可能与之勾通了。
代码片断: Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);

//或者

Cursor cursor = manageQuery(uri, null, null, null, null);

// 可以使用游标cursor获取想要的信息

...

// 删除

int count = getContentResolver().delete(Uri url, String where, String[] selectionArgs);

......
复制代码
对Uri的说明:
Uri(unified Resource identifier)就是统一资源标识,指定了一个特定的资源,遵照RFC2396规范。
一般格式为:
<scheme>://<authority><path><query>#<fragment>
例如: content://your.contentprovider/what_u_provided
其中scheme=content 表示专为ContentProvider使用。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值