分析Content Providers用法【转】

分析Content Providers用法

 

前面我们在“Android应用程序剖析”中讨论过Android平台上四种存储数据的方法以及需要着重注意的特性。Content Providers是Android提供的一种让我们能够在不同应用间共享数据 的唯一的 通用化接口机制,通过对底层的数据源进行抽象,Content Providers 解除了应用程序层和数据层的耦合,这样应用程序可以轻便的在不同数据源之上切换(和DAO的理想相当一致),Content Providers使用 权限控制,通过URI模式访问,读写双向,由此,任何具有对应permissions(许可、权限)的应用程序都可以增删查改 由另一个程序创建的数据---包括一些本地化Android数据库(也就是说你的程序可以访问通讯录,浏览器历史等),同样,你可以把你自己的数据源发布成Content Providers,这样其他开发者就可以和你所开发的应用中的数据进行交互,甚至扩展。

为什么需要Content Provider?

因为在Android平台上文件都是应用程序私有的,也就是应用程序只能访问自己的文件,如果是属于其它应用程序的文件,一般式无法直接访问的。如果需要共享数据,那么我们就需要content provider,简单的说就是用content provider把数据包装后供授权的Application访问。

什么是Content Provider?

Content Provider实际上是一个类,这个类将它要共享的数据进行包装,提供了一组供其它应用程序调用的接口方法,这些方法可以让应用程序存储和提取被包装的数据。

创建Content Providers 步骤有哪些?

继承ContentProvider,重写onCreate,update,query,insert,delete,getType回调方法,当应用程序用ContentResolver.insert()等操作时,此处的函数被调用定义public static final Uri CONTENT_URI属性,此变量代表你的ContentProvider能够处理的 URI,必须是唯一的,(实际是引用AndroidManifest.xml中的定义),

构建数据存储系统,我们可以使用文件存储或是SQLite数据库,或其他

针对SQLite3,我们的步骤如下:

1、定义内部类继承SQLiteOpenHelper,并重写onCreate(SQLiteDatabase db)     onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法.

2、对于query(),我们在其内部依赖Cursor SQLiteQueryBuilder.Query()发送查询,对于其他insert,update,delete我们直接借助SQLiteDatabase.insert等完成

3、Content Provider的onCreate()中,我们做如下初始化    

1 Context context = getContext();

3        DatabaseHelper dbHelper;

5        dbHelper = new DatabaseHelper(context, DATABASE_NAME,        null,DATABASE_VERSION);

7        DB = dbHelper.getWritableDatabase();

9        return (DB == null) ? false : true;

定义我们的查询时所会用到的列名,一般我们会把数据库中表的所有列名都定义成常量,方便查询时Cursor提取值

// Column Names 表中列名
 
     public static final String KEY_ID = "_id";
 
     public static final String KEY_DATE = "date";
 
     public static final String KEY_DETAILS = "details";
 
     public static final String KEY_LOCATION_LAT = "latitude";

URI数据请求来了,作为Content Provider的开发者你需要告诉Conent Provider怎么判断URI想要哪种数据,这里需借助UriMatcher

private static final UriMatcher uriMatcher;

    static {

       uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

.......

    }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值