分析Content Providers用法【转】
分析Content Providers用法
前面我们在“Android应用程序剖析”中讨论过Android平台上四种存储数据的方法以及需要着重注意的特性。ContentProviders是Android提供的一种让我们能够在不同应用间共享数据的唯一的通用化接口机制,通过对底层的数据源进行抽象,ContentProviders解除了应用程序层和数据层的耦合,这样应用程序可以轻便的在不同数据源之上切换(和DAO的理想相当一致),ContentProviders使用权限控制,通过URI模式访问,读写双向,由此,任何具有对应permissions(许可、权限)的应用程序都可以增删查改由另一个程序创建的数据---包括一些本地化Android数据库(也就是说你的程序可以访问通讯录,浏览器历史等),同样,你可以把你自己的数据源发布成ContentProviders,这样其他开发者就可以和你所开发的应用中的数据进行交互,甚至扩展。
为什么需要ContentProvider?
因为在Android平台上文件都是应用程序私有的,也就是应用程序只能访问自己的文件,如果是属于其它应用程序的文件,一般式无法直接访问的。如果需要共享数据,那么我们就需要contentprovider,简单的说就是用contentprovider把数据包装后供授权的Application访问。
什么是ContentProvider?
ContentProvider实际上是一个类,这个类将它要共享的数据进行包装,提供了一组供其它应用程序调用的接口方法,这些方法可以让应用程序存储和提取被包装的数据。
创建ContentProviders步骤有哪些?
继承ContentProvider,重写onCreate,update,query,insert,delete,getType回调方法,当应用程序用ContentResolver.insert()等操作时,此处的函数被调用定义publicstaticfinalUriCONTENT_URI属性,此变量代表你的ContentProvider能够处理的URI,必须是唯一的,(实际是引用AndroidManifest.xml中的定义),
构建数据存储系统,我们可以使用文件存储或是SQLite数据库,或其他
针对SQLite3,我们的步骤如下:
1、定义内部类继承SQLiteOpenHelper,并重写onCreate(SQLiteDatabasedb)和onUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion)方法.
2、对于query(),我们在其内部依赖CursorSQLiteQueryBuilder.Query()发送查询,对于其他insert,update,delete我们直接借助SQLiteDatabase.insert等完成
3、在ContentProvider的onCreate()中,我们做如下初始化
1Contextcontext=getContext();
2
3DatabaseHelperdbHelper;
4
5dbHelper=newDatabaseHelper(context,DATABASE_NAME,null,DATABASE_VERSION);
6
7DB=dbHelper.getWritableDatabase();
8
9return(DB==null)?false:true;
定义我们的查询时所会用到的列名,一般我们会把数据库中表的所有列名都定义成常量,方便查询时Cursor提取值。
//ColumnNames表中列名
publicstaticfinalStringKEY_ID="_id";
publicstaticfinalStringKEY_DATE="date";
publicstaticfinalStringKEY_DETAILS="details";
publicstaticfinalStringKEY_LOCATION_LAT="latitude";
URI数据请求来了,作为ContentProvider的开发者你需要告诉ConentProvider怎么判断URI想要哪种数据,这里需借助UriMatcher。
privatestaticfinalUriMatcheruriMatcher;
static{
uriMatcher=newUriMatcher(UriMatcher.NO_MATCH);
.......
}
更多相关文章
- 自定义View学习笔记(二)-Android坐标系简介
- [置顶] android 自定义控件
- Android应用程序模拟手机按键
- ANDROID:LISTVIEW 自定义背景
- Android 中自定义View的应用 (自绘TextView) ---- 转