美文网首页
内容提供器

内容提供器

作者: 爱做梦的严重精神病患者 | 来源:发表于2018-09-28 16:03 被阅读0次

1.ContentResolver

 对于每一个应用程序来说,如果想要访问内容提供器(ContentProvider)中共享的数据,就一定要借助ContentResolver类。可以通过Context中的getContentResolver()方法获取该类的实例
 ContentResolver中提供了一系列的方法用于对数据进行CRUD操作,这些方法都是接收Uri参数的,这个参数被称为内容URI。内容URI主要由两部分组成:authority和path,最标准的格式写法如下:content://com.futuring.app.provider/table。其中,content协议com.futuring.app.provider包名table表名

 在得到了内容URI字符串之后,还需要将它解析成Uri对象才可作为参数传入:

Uri uri = Uri.parse("content://com.futuring.app.provider/table")

 ContentResolver中的CRUD操作

查:getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder)

query()方法参数 对应SQL部分 描述
uri form table_name 指定查询某个应用程序下的某一张表
projection select column1, column2 指定查询的列名
selection where column = value 指定where的约束条件
selectionArgs - 为where中的占位符提供具体的值
orderBy order by column1, column2 指定查询结果的排列方式
Cursor cursor = null;
try{
    cursor = getContentResolver().query(uri, projection, selection, selectionArgs, orderBy);
    if(cursor != null) {
          while(cursor.moveToNext()) {
                  String name = cursor.getString(cursor.getColumnIndex("name"));
                  int id = cursor.getInt(cursor.getColumnIndex("id"));
                      } 

            }
} catch(Exception e) {
    e.printStackTrace();
    } finally {
           if(cursor  !=  null) {
                cursor.close();
                }  
   }

增:getContentResolver().insert(uri, values)

ContentValues values = new ContentValues();
valuse.put("column1", "text");
valuse.put("column2", 1);
getContentResolver().insert(uri, values);

改:getContentResolver().update(uri, values, selection, selectionArgs)

//将cloumn1 = text, cloumn2 = 1 这条数据中的text改为changed
ContentValues values = new ContentValues();
values.put("column1", "changed");
getContentResolver().update(uri, values, "cloumn1 = ? and column2 = ?", 
new String[] {"text", "1"});

删:getContentResolver().delete(uri, selection, selectionArgs)

getContentResolver().update(uri, "column2 = ?", new String[] {"1"});

2.使用现有的ContentProvider来读取和操作数据

 例:读取联系人信息

Cursor cursor = null;
try{
    //查询联系人数据
    cursor = getContentResolver().query(ContactsContract.CommonDataKinds
.Phone.CONTENT_URI, null, null, null, null);
    if(cursor != null) {
          while(cursor.moveToNext()) {
                  String displayName= cursor.getString(cursor.getColumnIndex(
             ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                  String number = cursor.getInt(cursor.getColumnIndex(
                  ContactsContract.CommonDataKinds.Phone.NUMBER));
                      } 
            }
} catch(Exception e) {
    e.printStackTrace();
    } finally {
           if(cursor  !=  null) {
                cursor.close();
                }  
   }

ContactsContract.CommonDataKinds.Phone类已经封装了一个CONTENT_URI常量,这个常量就是使用Uri.parse()方法解析出来的。

相关文章

  • 内容提供器

    1.ContentResolver  对于每一个应用程序来说,如果想要访问内容提供器(ContentProvide...

  • 内容提供器

    Content Provider 主要用于在不同App间共享数据。 权限申请 App中某些功能的执行需要申请And...

  • 内容提供器

    一般有两种,一种是使用现有的内容提供器,读取和操作相应程序的数据,另一种是创建自己的内容提供器给其他程序提供数据。...

  • 内容提供器简介

    内容提供器是Android中实现跨程序共享数据的标准方式,内容提供器主要用于在不同的应用程序之间实现数据共享的功能...

  • ContentProvider-内容提供器

    1. 概述 content provider主要是在不同的应用程序之中实现数据共享功能,提供了一套完整的机制,允许...

  • 第一行代码(七)

    第七章内容主讲内容提供器 一、内容提供器简介   虽然文件和 SharedPreferences 存储中提供了 M...

  • 安卓四大组件之Provider

    内容提供器介绍## 内容提供器用法## 内容提供器介绍内容提供者主要用于在不同的应用程序之间实现数据共享的功能,它...

  • 第六章(内容提供器-Content Provider)

    内容提供器(Content Provider) 内容提供器简介: Content Provider主要用于在不同的...

  • <第一行代码>chapter7 ContentPro

    内容提供器 思维导图 最近在练习使用思维导图,献一下丑。。。 什么是内容提供器 内容提供器主要用于在不同应用程序间...

  • Android10-跨程序共享数据

    使用内容提供器(Content Provider),可以实现不同应用程序建的数据共享功能。内容提供器提供了一套完整...

网友评论

      本文标题:内容提供器

      本文链接:https://www.haomeiwen.com/subject/wkkpoftx.html