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

  • 相关阅读:
    eclipse生成jar包 注意事项!
    java结合testng,利用XML做数据源的数据驱动示例
    2018 计蒜之道 初赛 第二场
    2018 计蒜之道 初赛 第一场
    Tarjan&&缩点简析
    POJ1159
    POJ1080
    POJ1260
    POJ2533&&1836&&3176
    Luogu P1484 种树
  • 原文地址:https://www.cnblogs.com/jeriffe/p/2744449.html
Copyright © 2011-2022 走看看