内容提供者-Content Provider

来源:互联网 发布:shopee123软件怎么样 编辑:程序博客网 时间:2024/04/30 08:33

作用: 主要用于在不同程序之间实现数据共享的功能

ContentResolver的使用:

借助ContentResolver类便可以实现访问内容提供者中共享的数据

创建实例:Context.getContentResolver()

  • insert()://用于添加数据
  • delete()://用于删除数据
  • query()://用于查询数据
  • update()://用于更新数据

Uri对象

它由两部分组成:权限(authority)+路径(path)
标准格式:content://com.sendi.app.provider/table1

得到uri字符串之后,我们还需将它解析成Uri对象:
Uri.parse(“content://com.sendi.app.provider/table1”);

Uri规则:
content://com.sendi.app.provider/table1/1 :表示访问com.sendi.app这个应用下table表中id为1的数据
“*” :匹配任意长度的任意字符
“#”:匹配任意长度的任意数字

增删改查

  • 查询:
    Cursor cursor=getContentResolver().query(
    uri,
    列名,
    条件,
    where中指定占位符的值,
    排序方式);

while(cursor.moveToNext()){
String col1=cursor.getString(cursor.getColumnIndex(“列值1”));
String col2=cursor.getString(cursor.getColumnIndex(“列值2”));
}
cursor.cloase();

  • 添加:
    ContentValues values=new ContentValues();
    values.put(“c1”,”value1”);
    values.put(“c2”,”value2”);
    getContentResolver().insert(uri,values);

  • 更新:
    ContentValues values=new ContentValues();
    values.put(“c1”,”value1”);
    getCOntentResolver().update(uri,values,”c1=? and c2=?”,new String[]{“text”,”1”});

  • 删除:
    getContentResolver().delete(uri,”c2=?”,new String[]{“v2”});

自定义内容提供者

  1. 继承ContentProvider
  2. 实现方法:onCreate、query、insert、update、delete、getType
    • onCreate:内容提供者初始化成功返回true,否则返回false
    • query:查询
    • insert:插入
    • update:更新
    • delete:删除
    • getType:根据传入的Uri返回相应的类型

注意
需要在清单中注册内容提供者

<provider     android:name="com.sendi.test.MyProvider"    android:authorities="com.sendi.test.provider"    android:exported="true"></provider>

最后附上获取手机联系人代码

 private List<ContactBook> initContactList(List<ContactBook>contactList){        ContentResolver cr=mActivity.getContentResolver();        Cursor cursorContactId=cr.query(Uri.parse("content://com.android.contacts/raw_contacts"),new String[]{"contact_id"},null,null,null);        while (cursorContactId.moveToNext()){            List<String>list=new ArrayList<>();            String contactId=cursorContactId.getString(0);            Cursor cursorData=cr.query(Uri.parse("content://com.android.contacts/data"),new String[]{"data1","mimetype"},                    "raw_contact_id=?",new String[]{contactId},null);            while (cursorData.moveToNext()){                String data=cursorData.getString(0);                list.add(data);                Log.i("TEST", "click: "+data);            }            contactList.add(new ContactBook(list.get(1),list.get(0)));        }        cursorContactId.close();        return contactList;    }

记得在清单文件添加权限

    <uses-permission android:name="android.permission.READ_CONTACTS"/>    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>    <uses-permission android:name="android.permission.CALL_PHONE"/>
原创粉丝点击