Android四大组件(三)

150 阅读2分钟

「这是我参与11月更文挑战的第22天,活动详情查看:2021最后一次更文挑战

Content Provider简介

ContentProvider属于 Android的四大组件之一。内容提供者是应用程序之间共享数据的接口, Android 系统将这种机制应用到方方面面。ContentProvider 共享数据的好处是统一了数据访问方式。实现进程间的数据交互和共享(跨进程通信)。通过ContentProvider把应用中的数据共享给其他应用访问,它还提供了一套完整的机制,允许一个程序,访问另一个程序中的数据,重要的是能保证被访数据的安全性

ContentProvider的底层是Android的Binder机制。后面的文章中会进行详细的介绍。

URI

通过URI映射来判断需要操作的数据库中的哪张表,URI的用处就是描述路径。如下为标准URI的写法。

Uri uri = Uri.parse("content://com.baipiao.provider/User/1") 

URI主要分为四部分:

  • schema:Android固定设置为"content://"
  • authority:ContentProvider的唯一标识符,一般是程序的包名com.baipiao.provider
  • path:指要操作的数据表
  • id:通过id可以选择我们需要的那几列

基本使用

查询语句:

Uri uri = Uri.parse("content://com.baipiao.provider/User/1") 
Cursor cursor=getContentResolver().query(
        uri,
        projection,
        selection,
        selectionArgs,
        sortOrder
        );
参数sql语句基本描述
urifrom table_name查询的表名
projectionselect colum1查询的列名
selectionwhere colum1=value查询条件
selectionArgs-查询条件中占位符的具体的值
sortOrderorder by colum1排列方式

当查询结束后会返回一个Cursor对象,下面简单了解这是如何读取的

if (cursor != null) {
    while (cursor.moveToFirst()) {
        String s1=cursor.getString(cursor.getColumnIndex("s1"));
        String s2=cursor.getString(cursor.getColumnIndex("s2"));
    }
    cursor.close();
}

通过移动游标的位置来遍历Cursor集合,读取中每一行中所有列的数据。

增加语句:

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

更新语句:

ContentValues values = new ContentValues();
values.put("column1", "1");
getContentResolver().update(uri, values, "column1=?", new String[]{"2"});

删除语句:

getContentResolver().delete(uri,"column1=?", new String[]{"2"});