22读取联系人
来源:互联网 发布:jquery字符串转换数组 编辑:程序博客网 时间:2024/06/05 20:59
在模拟器中添加几个联系人,在data/data/下导出数据库,如下:
打开。
关心的表有:raw_contact,data,mimetypes,计三张表。
首先得到内容解析器,得到内容解析器之后,既可以使用查询的方法了,查询需要传入URI,查看源代码看下raw_contacts的路径。
resolver.query(uri, new String[]{"contact_id"}, selection, selectionArgs, sortOrder);
query的第二个参数对应于raw_contacts这张表,我们只关心联系人的id:
其他参数全部传入null。查询的结果返回的为cursor,对cursor进行moveToNext循环得到contact_id:
String contact_id = cursor.getString(0);根据得到的contact_id,查询对应data表中的数据。
Cursor dataCursor = resolver.query(uriData, new String[]{"data1"}, "contact_id=?", new String[]{contact_id}, null);
将最后的数据存入MAP中,将map添加到list中,返回list。
主界面的布局:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="${relativePackage}.${activityClass}" > <ListView android:id="@+id/contact" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/transparent" android:cacheColorHint="#00000000" android:descendantFocusability="afterDescendants" android:divider="#cccccc" android:dividerHeight="1px" android:fastScrollEnabled="false" /></RelativeLayout>
每个listitem的布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <ImageView android:id="@+id/iv_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/default_avatar" /> <TextView android:layout_toRightOf="@id/iv_image" android:id="@+id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="name" android:textSize="18sp" android:layout_marginLeft="10dp" android:textColor="#88000000" /> <TextView android:textColor="#88000000" android:textSize="18sp" android:id="@+id/phone" android:layout_toRightOf="@id/iv_image" android:layout_below="@id/name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="15205553932" android:layout_marginLeft="10dp" /> </RelativeLayout>
逻辑代码:
package com.dy.ustc.readcontact;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.content.ContentResolver;import android.database.Cursor;import android.net.Uri;import android.os.Bundle;import android.widget.ImageView;import android.widget.ListView;import android.widget.SimpleAdapter;import android.widget.TextView;public class MainActivity extends Activity {private ListView contact;private ImageView iv_image;private TextView name;private TextView phone;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);contact = (ListView) findViewById(R.id.contact);List<Map<String, String>> data = getContactInfo(); contact.setAdapter(new SimpleAdapter(this, data, R.layout.list_item, new String[]{"name","phone"}, new int[]{R.id.name,R.id.phone}));}/** * * 读取手机的联系人信息 * * @return */private List<Map<String, String>> getContactInfo() {//把所有的联系人List<Map<String, String>> list = new ArrayList<Map<String,String>>();// 得到一个内容解析器ContentResolver resolver = getContentResolver();// raw_contacts这张表的路径Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");// data表的路径Uri uriData = Uri.parse("content://com.android.contacts/data");Uri uri_mimetype = Uri.parse("content://com.android.contacts/mimetype");Cursor cursor = resolver.query(uri, new String[] { "contact_id" },null, null, null);while (cursor.moveToNext()) {String contact_id = cursor.getString(0);if (contact_id != null) {//具体的某一个联系人Map<String, String> map = new HashMap<String, String>();Cursor dataCursor = resolver.query(uriData,new String[] { "data1","mimetype" }, "contact_id=?",new String[] { contact_id }, null);while (dataCursor.moveToNext()) {String data1 = dataCursor.getString(0);//System.out.println(data1);String mimetype = dataCursor.getString(1);System.out.println(mimetype + ":" + data1);if ("vnd.android.cursor.item/name".equals(mimetype)) {//联系人的姓名map.put("name", data1);}else if ("vnd.android.cursor.item/phone_v2".equals(mimetype)) {//联系人的电话号码map.put("phone", data1);}}list.add(map);dataCursor.close();}}cursor.close();return list;}}
运行得到下面的结果:
0 0
- 22读取联系人
- 读取 联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人
- 读取联系人数据例子
- 读取联系人列表
- android联系人读取
- Android 读取联系人(详细)
- 读取联系人:ContentResolver
- 读取联系人信息
- mybatis源码总结--MapperBuilder(2)
- Spring 配置文件applicationContext.xml详解
- 第15周项目1-打入“内部”寻“内幕”
- iOS开发UI篇—控制器的创建
- 点击小球游戏
- 22读取联系人
- 死理性派
- 设计模式之策略模式
- 研读Java代码必须掌握的Eclipse快捷键
- 中国电信业转型的第三个风向标
- ThinkPHP使用技巧
- sphinx 增量索引 实现近实时更新
- 几种输入输出方式的区别
- JQuery一个checkbox实现全选/全不选,取消子checkbox时,全选checkbox取消对号