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
原创粉丝点击