public void query(View v){
//需求: 查询所有的联系人
//1. 查询raw_contacts表
ContentResolver resolver = getContentResolver();
Uri contactUri= Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri= Uri.parse("content://com.android.contacts/data");
Cursor cursor =resolver.query(contactUri, new String[]{"contact_id"}, null, null, null);
while(cursor.moveToNext()){
//这里仅仅是遍历得到每一个联系人的id而已,接下来要做的工作就是去查询data表, 根据id去查询
String id = cursor.getString(0);
//根据id去查询data表
Cursor dataCursor = resolver.query(dataUri, new String[]{"data1" ,"mimetype"}, "raw_contact_id=?", new String[]{id}, null);
while(dataCursor.moveToNext()){
String data =dataCursor.getString(0);
String mimetype =dataCursor.getString(1);
Log.d(TAG, "data==="+data+"--mimetype-"+mimetype);
}
dataCursor.close();
}
cursor.close();
}
下面有介绍源代码和数据库的截图
数据库的截图
查询联系人
- 为什么mimetype_id查询不了
原因是在源码中有一个map集合,用于过滤来查询的字段,如果在map中存在这个字段,那么就可以查询,否则将抛出异常。
- 为什么mimetype反而能够查询
因为真正插叙你的时候,并不是查询data表,而是查询view-data表。
删除联系人
android并没有直接删除这个联系人,而是把row_contacts表里面contact_id 置为null.
,以后要与云端数据对接的时候,就比较费劲。所以这里取巧了,只是变了一个标记位而已。