zoukankan      html  css  js  c++  java
  • Android学习十九:ContentProvider初步

      一、Content Provider基本概念

      1、ContentProvider为存储和获取数据提供了统一的接口。ContentProvide对数据进行封装。不用关心数据存储的细节。使用表的形式来组织数据。

      

    [转载]Android学习十九:ContentProvider初步

      2、使用ContentProvider能够在不同的应用程序之间共享数据。

      3、Android为常见的一些数据提供了默认的ContentProvider(包含音频、视频、图片和通讯录等)。

      ContentProvider所提供的函数:

      query(),insert(),update(),delete(),getType(),onCreate()等。

      二、URI(统一资源标识符)的用法

      为系统的每个资源给其一个名字,例如说通话记录。

      1、每个ContentProvider都拥有一个公共的URI,这个URI用于表示这个ContentProvider所提供的数据。

      2、Android所提供的ContentProvider都存放在android.provider包中。 将其分为A,B,C。D 4个部分:

      

    [转载]Android学习十九:ContentProvider初步

      A:标准前缀。用来说明一个Content Provider控制这些数据,无法改变的;"content://"

      B:URI 的标识,它定义了是哪个Content Provider提供这些数据。对于第三方应用程序,为了保证URI标识的唯一性,它必须是一个完整的、小写的 类名。这个标识在 元素的 authorities属性中说明:通常是定义该ContentProvider的包.类的名称;"content://hx.android.text.myprovider"

      C:路径,不知道是不是路径,通俗的讲就是你要操作的数据库中表的名字,或者你也能够自定义。记得在使用的时候保持一致就ok了;"content://hx.android.text.myprovider/tablename"

      D:假设URI中包括表示须要获取的记录的ID;则就返回该id相应的数据。假设没有ID,就表示返回所有;"content://hx.android.text.myprovider/tablename/#" #表示数据id

      三、ContentProvider的实现过程

      自己实现ContentProvider不常见。由于可能不须要和别的应用程序交换数据。使用内置的ContentProvider比較多。

      1、定义一个CONTENT_URI常量,提供了訪问ContentProvider的标识符。

      public static final Uri CONTENT_URI =Uri.parse("content://com.example.codelab.transportationprovider");

      当中:content是协议

      Com.exmaple.codelab.transportationprovider是类名。包括完整的包名。

      Uri.parse将一个字符串转换成Uri类型。

      假设Provider包括子表。相同定义包括字表的CONTENT_URI。

      content://com.example.codelab.transportationprovider/train

      content://com.example.codelab.transportationprovider/air/domestic

      content://com.example.codelab.transportationprovider/air/international

      然后定义列。确保里面包括一个_id的列。

      2、定义一个类,继承ContentProvider。

      public class FirstContentProvider extends ContentProvider

      先介绍一下ContentProvider用到的UriMatcher。

    UriMatcher的一个重要的函数是match(Uri uri)。这个函数能够匹配Uri,依据传入的不同Uri返回不同的自己定义整形值,以表明Uri訪问的不同资源的类型。

      比如:

      public static final UriMatcher uriMatcher;

      static {

      uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);

      uriMatcher.addURI(Book.AUTHORITY, "item", Book.ITEM);

      uriMatcher.addURI(Book.AUTHORITY, "item/#", Book.ITEM_ID);

      }

      这里UriMatcher类型的静态字段是用来匹配传入到ContentProvider中的Uri的类。其构造方法传入的匹配码是使用match()方法匹配根路径时返回的值,这个匹配码能够为一个大于零的数表示匹配根路径或传入-1,即常量UriMatcher.NO_MATCH表示不匹配根路径。

    addURI()方法是用来添加其它URI匹配路径的。第一个參数传入标识ContentProvider的AUTHORITY字符串。

    第二个參数传入须要匹配的路径。这里的#号为通配符,代表匹配随意数字,另外还能够用*来匹配随意文本。第三个參数必须传入一个大于零的匹配码。用于match()方法对相匹配的URI返回相相应的匹配码。 比如:sMatcher.addURI(“com.test.provider.personprovider”, “person”, 1);假设match()方法匹配content://com.test.provider.personprovider/person路径,返回匹配码为1。

      3、实现query,insert,update,delete,getType和onCreate方法。

      4、在AndroidManifest.xml其中进行声明。

      

  • 相关阅读:
    启用了不安全的HTTP方法
    Ubuntu 16.04出现:Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh > /dev/null; fi'
    python发邮件
    糗事百科爬虫
    链接爬虫
    简单图片爬虫
    常见的非贪婪匹配
    [Selenium] WebDriver 操作 HTML5 中的 drag/drop
    [Selenium] 操作 HTML5 中的 Canvas 绘制图形
    [Selenium] WebDriver 操作 HTML5 中的 video
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5076236.html
Copyright © 2011-2022 走看看