当前位置: 代码迷 >> Android >> [新手!]获取联系人信息出错
  详细解决方案

[新手!]获取联系人信息出错

热度:88   发布时间:2016-04-28 04:35:30.0
[新手求助!]获取联系人信息出错!
UI:
    只在主界面上显示一个ListView。
程序意图:
    在代码中,通过ContentResolver查询系统中的联系人数据库,然后获得所有联系人对应的信息(这里只获取姓名和号码),并包装成数据集,在ListView中显示。

MainActivity代码如下:

package com.example.getcontact;

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.ListView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {
private ListView lv;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.lv);
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Map<String, Object> map;

Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
Uri dataUri = Uri.parse("content://com.android.contacts/data");
ContentResolver resolver = getContentResolver();

Cursor cursor = resolver.query(uri, null, null, null, null);
// 在raw_contacts表中遍历
while (cursor.moveToNext()) {
// 每个Map对象对应一个联系人
map = new HashMap<String, Object>();
String id = cursor.getString(cursor.getColumnIndex("contact_id"));
// 根据在rew_contacts表中的contact_id,在data表中遍历
Cursor dataCursor = resolver.query(dataUri, null, "raw_contact_id=?", 
new String[] { id }, null);
// 以下循环为在"raw_contact_id"相同情况下进行,即对同一个id(联系人)进行信息遍历
while (dataCursor.moveToNext()) {
// 判断该行是否为电话类型
if (dataCursor.getString(cursor.getColumnIndex("mimetype"))
.equals("5")) {
String number = dataCursor.getString(dataCursor
.getColumnIndex("data1"));
map.put("number", number);
} else if (dataCursor.getString(cursor.getColumnIndex("mimetype"))
.equals("6")) {
String name = dataCursor.getString(dataCursor
.getColumnIndex("data1"));
map.put("name", name);
}
}
map.put("header", R.drawable.ic_launcher);
data.add(map);
dataCursor.close();
//至此,遍历完一个联系人(一个raw_contact_id)的所有信息
}
cursor.close();
//为ListView配置适配器
setAdapter(lv, data);
}

public void setAdapter(ListView lv, List<Map<String, Object>> data) {

lv.setAdapter(new SimpleAdapter(getApplicationContext(), data,
R.layout.list_item,
new String[] { "header", "name", "number" }, new int[] {
R.id.iv_header, R.id.tv_name, R.id.tv_number }));
}
}



然后是这个:


求前辈指点。
------解决方案--------------------
uri地址好像不对,再百度下
------解决方案--------------------

import android.provider.ContactsContract.CommonDataKinds.Phone;加入这个
然后将uri改为uri = Phone.CONTENT_URI;
然后在manifest,xml中加入<uses-permission android:name="android.permission.READ_CONTACTS" />权限
  相关解决方案