android_内容访问者去访问联系人

来源:互联网 发布:petshop 源码下载 编辑:程序博客网 时间:2024/05/16 00:27
    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.
,以后要与云端数据对接的时候,就比较费劲。所以这里取巧了,只是变了一个标记位而已。

0 0
原创粉丝点击