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其中进行声明。

      

  • 相关阅读:
    pip不是内部或外部命令也不是可运行的程序或批处理文件的问题
    动态规划 leetcode 343,279,91 & 639. Decode Ways,62,63,198
    动态规划 70.climbing Stairs ,120,64
    (双指针+链表) leetcode 19. Remove Nth Node from End of List,61. Rotate List,143. Reorder List,234. Palindrome Linked List
    建立链表的虚拟头结点 203 Remove Linked List Element,82,147,148,237
    链表 206 Reverse Linked List, 92,86, 328, 2, 445
    (数组,哈希表) 219.Contains Duplicate(2),217 Contain Duplicate, 220(3)
    重装系统
    java常用IO
    端口
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5076236.html
Copyright © 2011-2022 走看看