80,350
社区成员
发帖
与我相关
我的任务
分享
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 }));
}
}