内容提供器

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()方法解析出来的。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容