ContentProvider 属于Android应用程序的组件之一,作用是对外共享数据。我们可以通过ContentProvider把应用中的数据共享给其他应用访问,其他应用可以通过ContentProvider对你应用中的数据进行添删改查。
可以通过以下方法获得ContentProvider对象
ContentResolver cr = getContentResolver();
ContentProvider 将其存储的数据以数据表的形式提供给访问者,在数据表中每一行为一条记录,每一列为具有特定类型和意义的数据。每一条数据记录都包括一个 "_ID" 数值字段,该字段唯一标识一条数据。
查询返回一个Cursor对象,它能遍历读取各个字段的值。为了读取数据,必须知道包含的数据类型
每一个ContentProvider 都对外提供一个能够唯一标识自己数据集(data set)的公开URI, 如果一个ContentProvider管理多个数据集,其将会为每个数据集分配一个独立的URI。所有的Content Provider 的URI 都以"content://" 开头,其中"content://"是用来标识数据是由ContentProvider管理的
public Cursor query(Uri uri, String[]projection, String selection, String[] selectionArgs, String sortOrder)
Uri uri 标识特定的uri常量
String[] projection 需要返回的列名,是一个数组,可以返回多个列。null表示全部
String selection 表示需要满足的查询条件,类似于where
String[] selectionArgs 选择参数
String sortOrder 类似于order by。Null表示默认,可能是无序的
获得数据使用Cursor对象处理,它能向前或向后遍历整个结果集
public Uri insert(Uri uri, ContentValuesvalues)
public int update(Uri uri, ContentValuesvalues, String selection, String[] selectionArgs)
public int delete(Uri uri, Stringselection, String[] selectionArgs)
Cursorcursor = resolver.query(Contacts.CONTENT_URI, null, null, null, null); while(cursor.moveToNext()){ int idIndex = cursor.getColumnIndex(columns[0]); int displayNameIndex = cursor.getColumnIndex(columns[1]); int id = cursor.getInt(idIndex); String displayName = cursor.getString(displayNameIndex); Cursor phone = resolver.query(Phone.CONTENT_URI, null, columns[3] + "=" +id, null, null); while(phone.moveToNext()){ int phoneNumberIndex = phone.getColumnIndex(columns[2]); String phoneNumber =phone.getString(phoneNumberIndex); sb.append(displayName + ":" + phoneNumber + "\n"); } phone.close(); } cursor.close();
private String[] columns = {Contacts._ID, Contacts.DISPLAY_NAME, Phone.NUMBER, Phone.CONTACT_ID};