zoukankan      html  css  js  c++  java
  • 基础篇:7.Content provider与Content Resolver实现数据共享

    前言:

      文件数据、数据库数据以及一些其它类型的数据在android中都是私有的,在android中,并没有提供所有应用共同访问的公共储存区域。但各应用程序间通常需要进行数据共享,如联系人信息等。

      在android中,应用程序可以实现Content Provider的抽象接口从而将自己的数据暴露出去。Content Provider拥有一套通用的方法来实现对数据的增、删、改、查功能。但通常情况下我们都是使用系统内置的Content Provider,自己实现并不常见。

      当数据在一个应用程序中被暴露出来后,外界可以通过Content Resolver提供的一套标准方法对数据进行增、删、改、查操作。

    Content Provider类:

      1.Content Provider为储存数据提供了统一的接口,利用表的形式进行数据储存:

      2.android为常见的一些数据提供了默认的Content Provider,如声音、视频、图像等。

    Content Resolver类:

      外界程序通过实现Content Resolver的接口可以访问Content Provider提供的数据。在Activity中,可以通过getContentResolver()获得当前应用的Content Resolver实例。Content Resolver的一些常用接口如下:

      增:inser(Uri uri,ContentValues values) ---将数据插入到uri所指定的位置;

      删:delete(Uri uri,String where,String[] selectionArgs)---删除指定uri并符合指定条件的数据;

      改:update(Uri uri,ContentValues values,String where,String[] selectionArgs)---更改uri指定并符合指定条件的数据;

      查:query(Uri uri,String[] projection,String selection,String[] selectionArgs,String sortOrder)---查询uri指定并符合指定条件的数据,并返回Cursor对象。其中第二个参数为:应返回的列名称;第三个参数为:哪些行被返回的过滤器。

    private String getdata() {
            // TODO Auto-generated method stub
            StringBuilder sb=new StringBuilder();//StringBuilder一个可变的字符序列
            ContentResolver resolver=getContentResolver();//获得ContentResolver对象
            Cursor cursor=resolver.query(Contacts.CONTENT_URI, null, null, null, null);//调用query进行查询
            int inIndex=cursor.getColumnIndex(columns[0]);//获得ID纪录的列索引
            int nameIndex=cursor.getColumnIndex(columns[1]);
            while(cursor.moveToNext()){
                int id=cursor.getInt(inIndex);//取得id
                String name=cursor.getString(nameIndex);
                Cursor phone=resolver.query(Phone.CONTENT_URI, null, columns[3]+"="+id, null, null);//查询数据
                while(phone.moveToNext()){
                    int phoneIndex=phone.getColumnIndex(columns[2]);
                    String phoneNumber=phone.getString(phoneIndex);
                    sb.append(id+":"+name+phoneNumber+"
    ");//将字符添加到生成器(StringBuilder)
                }        
            }
            cursor.close();
            return sb.toString();
        }

    URI:

      URI---统一资源标识符:为系统的每个资源配一个名字如联系人、通话记录、未接来电等。

      每个Content Provider都拥有一个公共的URI,用于表示这个URI所提供的数据,标识着Content Resolver应该使用哪个provider以及其中的哪些表格。

      A:标准前缀:不用修改。

      B:URI标识:定义了是由哪个provider提供的数据。对于第三方应用,这部分应该是完整的类名(小写)。

      C:路径:指定被请求的数据类型,如若只有一种数据类型,也可以不指定该部分。

      D:特定记录的ID值,增加这部分,可以返回ID所指定的数据,否则返回全部。

      根据我自己的理解,将Content Provider与Content Resolver之间的关系绘制如下图:

  • 相关阅读:
    电力企业信息化建设方案之调度信息报送系统
    HP QC IE11不支持( win7 64位 无法安装)解决方法
    ajax传递list集合
    mysql主从配置
    js动态获取地址栏后的参数
    html页面保存数的两种方式
    微信开发之八 页面获取周围beacon设备
    最好的时光在路上,最美的风景在远方
    【摄影】田子坊
    【前端统计图】echarts实现简单柱状图
  • 原文地址:https://www.cnblogs.com/dream550/p/3906447.html
Copyright © 2011-2022 走看看