`

android Content provider

阅读更多

Content provider,为其它应用程序(也可以是提供该Content provider的应用程序)
提供了一个接口一致数据储存模型。通过该接口,你可以方便地提取你想要的数据,
修改或者是删除都会变得相当方便。依照 ANDROI组件模型的原理,把数据储存与数据显示分离天来,
这不但提高了组件重用性,也同时提供更高的完全性(每一个Content Provider都有自己的许可属性)。
作为数据储存的后端,你可以使用有Sqlite3保存数据,也可以使用文件系统保存,甚至是使用网络;
后端的多样 性给得程序的设计更富有弹性。

每一个实现都在从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来完成,该类将对数据库的操作作了有效的封装,有利于我们使用。
代码片断: 

1.class youtDbHelper extends SQLiteHelper {   
2.    // 创建数据库   
3.    public void onCreate(SQLiteDatabase db);   
4.    // 更新数据库   
5.    public void onUpdate(SQLiteDatabase db, int oldVersion, int newVersion)   
6.      
7.    ......   
8.}  

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

1.Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);            
2.    //或者   
3.    Cursor cursor = manageQuery(uri, null, null, null, null);   
4.    // 可以使用游标cursor获取想要的信息   
5.    ...   
6.    // 删除   
7.    int count = getContentResolver().delete(Uri url, String where, String[] selectionArgs);   
8.   ......  

 对Uri的说明:
   Uri(unified Resource identifier)就是统一资源标识,指定了一个特定的资源,遵照RFC2396规范。
   一般格式为:
   

Java代码
  1. <scheme>://<authority><path><query>#<fragment>  
 <scheme>://<authority><path><query>#<fragment>

  
例如:

Java代码
  1. content://your.contentprovider/what_u_provided  
content://your.contentprovider/what_u_provided

   
其中scheme=content 表示专为ContentProvider使用。 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics