• Android组件系列----ContentProvider内容提供者【1】


    【正文】


    一、ContentProvider简单介绍:

    ContentProvider内容提供者(四大组件之中的一个)主要用于在不同的应用程序之间实现数据共享的功能

    ContentProvider能够理解为一个Android应用对外开放的接口。仅仅要是符合它所定义的Uri格式的请求,均能够正常訪问运行操作。其它的Android应用能够使用ContentResolver对象通过与ContentProvider同名的方请求运行,被运行的就是ContentProvider中的同名方法

    所以ContentProvider有非常多对外能够訪问的方法,在ContentResolver中均有同名的方法,是一一相应的。来看 以下这一张图:

    12154217-a98af1e70c7e46cca16299e42ee30fb3

    Android附带了很多实用的ContentProvider。可是本文临时不涉及到这么多(本文将学习怎样创建自己的ContentProvider)。Android中自带的ContentProvider包含:

    • Browser:存储如浏览器的信息。
    • CallLog:存储通话记录等信息。
    • Contacts Provider:存储联系人(通讯录)等信息。
    • MediaStore:存储媒体文件的信息。
    • Settings:存储设备的设置和首选项信息。

    此外,还有日历、

    ContentProvider的方法:

    假设要创建自己的内容提供者,须要新建一个类继承抽象类ContentProvider,并重写当中的抽象方法。抽象方法例如以下:

    复制代码
    boolean onCreate()   
    初始化提供者 Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) 查询数据。返回一个数据Cursor对象。当中參数selection和selectionArgs是外部程序提供的查询条件 Uri insert(Uri uri, ContentValues values)
    插入一条数据。參数values是须要插入的值
    int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
    依据条件更新数据
    int delete(Uri uri, String selection, String[] selectionArgs)
    依据条件删除数据 String getType(Uri uri)
    返回MIME类型相应内容的URI
    复制代码

    除了onCreate()和getType()方法外。其它的均为CRUD操作,这些方法中。Uri參数为与ContentProvider匹配的请求Uri,剩下的參数能够參见SQLite的CRUD操作,基本一致。 

    备注:还有两个很有意思的方法,必需要提一下。call()和bulkInsert()方法,使用call,理论上能够在ContentResolver中运行ContentProvider暴露出来的不论什么方法,而bulkInsert()方法用于插入多条数据。


    Uri:

    在Android中,Uri是一种比較常见的资源訪问方式。而对于ContentProvider而言。Uri也是有固定格式的:<srandard_prefix>://<authority>/<data_path>/<id>

    • <srandard_prefix>:ContentProvider的srandard_prefix始终是content://。

    • <authority>:ContentProvider的名称。

    • <data_path>:请求的数据类型。
    • <id>:指定请求的特定数据。

    在ContentProvider的CRUD操作,均会传递一个Uri对象,通过这个对象来匹配相应的请求

    那么怎样确定一个Uri运行哪项操作呢?须要用到一个UriMatcher对象,这个对象用来帮助内容提供者匹配Uri。它所提供的方法很easy。仅有两个:

    • void addURI(String authority,String path,int code):加入一个Uri匹配项。authority为AndroidManifest.xml中注冊的ContentProvider中的authority属性;path为一个路径,能够设置通配符,#表示随意数字。*表示随意字符code为自己定义的一个Uri代码。

    • int match(Uri uri):匹配传递的Uri,返回addURI()传递的code參数。
  • 相关阅读:
    Nginx使用
    MySQL 分区
    php PDO预处理
    php
    php
    linux 下编译安装MySQL
    php 工厂模式
    MySQL 权限管理
    hadoop集群安装20181016(20111130:前面太忙,没有写完,后面继续)
    JavaScript函数参数翻转——连接多个数组——zip、zipwith
  • 原文地址:https://www.cnblogs.com/jzssuanfa/p/6927569.html
Copyright © 2020-2023  润新知