zoukankan      html  css  js  c++  java
  • Android学习(八) ContentProvider

    Android中,应用之间的数据共享是通过统一的接口(这里所说的接口 并非JAVA/C#语言中的那个Interface)来实现的,这个接口就是ContentProvider。ContentProvider是Android的四大组件之一(四大组件:Activity、Service、Intent、ContentProvider),应用要想共享自己的数据给其他的应用访问,那么可以派生自基类ContentProvider来实现数据的外部访问。

    ContentProvider是以Uri的形式向外部提供数据的,其形式如:content://xxx.xxxxx,有点类似RESTFul,通过一个URI来确定一个资源,但是这只是其Uri表象形式,其实他比REST更为灵活,他可以接收查询过滤(Selection),结果排序(OrderBy)等,其查询结果一个Cursor。我们只需要2个步骤就可以实现自己的应用对外的ContentProvider:

      1.自定义一个ContentProvider,继承自ContentProvider,并实现相关的方法

      2.注册我们自定义的ContentProvider(在AndroidManifest.xml中注册)

    ContentProvider类提供了如下常用的方法:

    onCreate() :初始化ContentProvider.
    query(Uri, String[], String, String[], String) :查询数据。
    insert(Uri, ContentValues) :插入数据
    update(Uri, ContentValues, String, String[]) :更新数据。
    delete(Uri, String, String[]): 删除数据。
    getType(Uri) :返回content provider的 MIME Type。
    ContentProvider的Uri分为3格部分,比如content://com.jeriffe.app.customprovider/demodatas,其3格部分如下:

        1.Uri必须以content://起始

        2.com.jeriffe.app.customprovider是ContentProvider的Authority,也就是说这是那个ContentProvider。

        3.demodatas就是要访问的资源,这里是要访问com.jeriffe.app.customprovider下的demodatas列表,比如content://com.jeriffe.app.customprovider/demodata/2,这里的demodatas/2是要访问ID为2的demodata数据。

    我们该如何访问ContentProvider呢,Android是通过ContentResolver类来操作ContentProvider的数据的。ContentResolver类提供了如下常用方法

    query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder):查询给定的URI,返回一个Cursor对象.

    insert(Uri url, ContentValues values):插入数据.

    update(Uri uri, ContentValues values, String where, String[] selectionArgs):更新数据.

    delete(Uri url, String where, String[] selectionArgs):删除数据.

    getType(Uri url):返回给定Uri的 MIME Type。

    openInputStream(Uri uri)打开一个给定Uri关联的Strea
    openOutputStream(Uri uri):等同于 openOutputStream(uri, "w")
    openOutputStream(Uri uri, String mode):打开一个给定Uri关联的Stream.

    notifyChange(Uri uri, ContentObserver observer):ContentProvider数据发生变更时,通知注册的ContentObservers.

    registerContentObserver(Uri uri, boolean notifyForDescendents, ContentObserver observer):注册一个观察者类,当给定的Uri对应的ContentProvider数据发生变更时,发起一个回调

    unregisterContentObserver(ContentObserver observer):移除注册的回调ContentObserver.

    下来我们通过2格DEMO来演示:

    示例1:访问系统的联系人信息

     

    示例2:自定义个一个ContentProvider

  • 相关阅读:
    HDU 2852 KiKi's K-Number (主席树)
    HDU 2089 不要62
    Light oj 1140 How Many Zeroes?
    Bless You Autocorrect!
    HDU 6201 transaction transaction transaction
    HDU1561 The more ,The better (树形背包Dp)
    CodeForces 607B zuma
    POJ 1651 Mulitiplication Puzzle
    CSUOJ 1952 合并石子
    Uva 1599 Ideal path
  • 原文地址:https://www.cnblogs.com/jeriffe/p/2744449.html
Copyright © 2011-2022 走看看