android 学习四 ContentProvider

1.系统自带的许多数据(联系人,本地信息等)保存在sqllite数据库,然后封装成许多ContentProvider来供其他程序访问。

2.对sqllite数据库的操作,可以在命令行通过adb工具登录设备运行sqlite3来操作。
3.ContentProvider 是用URI来标示,访问程序通过URI来访问相应的数据,URI的结构是
   content://***/*/*...其中***是授权,在ContentProvider提供程序的说明文件中声明,后面的*表示路径,具体由ContentProvider实现来解释,ContentProvider为简化URI的调用,将这种URI定义为常量字符串供查看和调用。
 
4.客户端通过URI和需要获取的列,选择条件,排序条件等用相应的api来获取结果,结果是一个android Cursor,可以使用相应的方法获取结果集中的内容,返回的数据是MIME格式,类型/子类型。
 
5.android内置
 
 
6.从Context中获取ContentResolver,然后ContentResolver通过URI  进行AUD ContentProvider操作
7.可以通过managedQuery方法获取一个ContentProvider数据集合(Cursor)然后通过Cursor类的,moveFirst() afterLast() moveNext()来遍历数据,并可以先获取列索引(Cursor.getColumnIndex(columnName)),然后根据索引获取列值(Cursor.getString(ColumnIndex))
 
8.where子句可以通过URI和参数两种方式,orderby子句可以通过参数,having可以通过参数指定。
9.操作记录时需要一个ContentValues类型,该类型为键值对,键为列名值为需要插入的值。insert操作会返回插入记录的URI
10.将文件添加到ContentProvider中。
     10.1通过一个insert操作获取URI
     10.1通在URI上使用(ContentResolver.openOutputStream(URI)来让提供程序产生一个内部文件,并将文件名保存在保留列_data上,然后返回这个内部文件的输出流。
 
11.实现一个ContentProvider的几个步骤
    11.1 计划数据库,URI及列名称,创建元数据类来定义所有这些数据元素常量
    11.2扩展抽象类ContentProvider
    11.3实现方法query,insert,update,delete和getType
    11.4在描述文件中注册提供程序。
 
12 扩展ContentProvider
     12.1扩展ContentProvider时需要定义和初始化一个列名称与别名的map,就算没有别名也需要。
     12.2用UriMatcher来识别uri
     12.3通过扩展SQLiteOpenHelper类来创建数据库,创建表,获取数据库实例。
     
 
原文地址:https://www.cnblogs.com/manziluo/p/5800370.html