第六章 访问ContentProvider共享数据
内容提供器Content Provider //Provider n. 供应者;养家者
主要用于在不同的应用程序之间实现数据共享功能
用法: 1.使用现有的内容提供器来读取和操作相应程序中的数据
通过ContentResolver实现增删改查。 //resolver n. 溶剂;[电子] 分解器;下决心者
ContentResolver contentResolver = context.getContentResolver
通过URI来指明所要操作的数据;
增删改查方法基本类似与SQLiteDatabase中的增删改差,只不过把第一个参数改为了URI。
查询数据:
通过ContentResolver的query()方法返回一个Cursor对象
@Nullable Cursor query(@NonNull Uri uri, @Nullable String[] projection,
@Nullable String selection, @Nullable String[] selectionArgs,
@Nullable String sortOrder)
参数: 1. uri 查询某个程序下的某一张表
2. projection 查询的列名 //projection n. 投射;规划;突出;发射;推测
3. selection where的约束条件
4.selectionArgs 为where中的占位符提供具体的值
5.sortOrder 指定查询结果的排序方式
返回一个Cursor对象
插入数据:
@Nullable Uri insert(@NonNull Uri url, @Nullable ContentValues values)
参数:ContentValues 待插入一个ContentValues对象类型的新纪录
返回新纪录的Uri
修改数据:
int update(@NonNull Uri uri, @Nullable ContentValues values,
@Nullable String where, @Nullable String[] selectionArgs)
参数: @Nullable ContentValues values 待修改的记录值
@Nullable String where 指定匹配记录的条件
@Nullable String[] selectionArgs 指定where中占位符的值
返回被修改记录的条数
删除数据:
int delete(@NonNull Uri url, @Nullable String where,
@Nullable String[] selectionArgs)
参数: @Nullable String where 指定匹配记录的条件
@Nullable String[] selectionArgs 指定where中占位符的值
返回被删除记录的条数
读取系统联系人案例代码:
1 /** 2 * 获得联系人信息并放入contactsList 3 */ 4 private void readContacts() 5 { 6 Cursor cursor = null;// cusor n. 游标 7 8 /** 9 * 查询联系人数据放入cusor中 10 * 参数: 1. uri 查询某个程序下的某一张表 11 * 2. projection 查询的列名 //projection n. 投射;规划;突出;发射;推测 12 * 3. selection where的约束条件 13 * 4.selectionArgs 为where中的占位符提供具体的值 14 * 5.sortOrder 指定查询结果的排序方式 15 */ 16 Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI; 17 ContentResolver contentResolver = getContentResolver(); 18 cursor = contentResolver.query(uri, null, null, null, null); 19 try 20 { 21 while (cursor.moveToNext()) 22 { 23 // 获取联系人姓名 24 String name = cursor.getString(cursor.getColumnIndex( 25 ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 26 // 获取联系人手机号 27 String number = cursor.getString(cursor.getColumnIndex( 28 ContactsContract.CommonDataKinds.Phone.NUMBER)); 29 30 contactsList.add(name + " " + number); 31 } 32 33 } catch (Exception e) 34 { 35 e.printStackTrace(); 36 } finally 37 { 38 // 关闭cursor 39 if (cursor != null) 40 { 41 cursor.close(); 42 } 43 } 44 }
**注意:在AndroidManifest.xml中声明读取系统取联系人权限
<!-- 声明读取系统取联系人权限 -->
<uses-permission android:name="android.permission.READ_CONTACTS"/>
用法: 2.创建自己的内容提供器给我们程序的数据提供外部接口
posted on 2015-12-13 17:47 starFarming 阅读(292) 评论(0) 编辑 收藏 举报