【达内课程】联系人项目(知识预热)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010356768/article/details/84559858

联系人表结构

首先在模拟机中添加几个联系人
在这里插入图片描述

然后打开Device File Exploer
data-data-com.android.providers.contacts下的databases文件夹
把contacts2.db导出,查看contacts表、data表、mimetypes表

联系人的信息操作前,必须把数据库的这3个表仔细看一下
contacts表
在这里插入图片描述

data表
在这里插入图片描述
mimetypes表
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

栗子:查询联系人数据

AndroidManifest.xml增加权限

 <uses-permission android:name="android.permission.READ_CONTACTS"/>

Contact类

public class Contact {
    private int id;
    private int photoId;
    private String name;
    private String email;
    private String phone;
    private String address;
   // 增加各个属性的set和get方法
   ......
   @Override
    public String toString() {
        return "Contact id:"+id+",\nPhoto id:"+photoId+",\nName:"+name+",\nEmail:"+email+",\nPhone:"+phone+",\nAddress:"+address;
    }
}

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_search;
    private ListView listView;

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

        btn_search = findViewById(R.id.btn_search);
        listView = findViewById(R.id.listview);
        btn_search.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_search:
                List<Contact> list = loadContacts();
                Log.d("CONTACT", list.toString());

                ArrayAdapter<Contact> arrayAdapter = new ArrayAdapter<Contact>(this, android.R.layout.simple_list_item_1, list);
                listView.setAdapter(arrayAdapter);
                break;
        }
    }

    /**
     * 查询联系人
     * 先查contacts表,获取所有人id
     * 再查data表,通过id查询这个人的其他信息
     */
    private List<Contact> loadContacts() {
        ContentResolver r = getContentResolver();
        Uri uri = ContactsContract.Contacts.CONTENT_URI;
        String[] projection = {
                ContactsContract.Contacts._ID,
                ContactsContract.Contacts.PHOTO_ID
        };

        String[] column = {
                ContactsContract.Data._ID,//0
                ContactsContract.Data.MIMETYPE,//1
                ContactsContract.Data.DATA1//2
        };

        Cursor c = r.query(uri, projection, null, null, null);

        //准备集合
        List<Contact> contacts = new ArrayList<Contact>();

        while (c.moveToNext()) {
            Contact contact = new Contact();

            int id = c.getInt(0);
            int photo_id = c.getInt(1);

            contact.setId(id);
            contact.setPhotoId(photo_id);

            //通过id查data表,获取这个人的其他信息
            Uri dataUri = ContactsContract.Data.CONTENT_URI;
            Cursor c1 = r.query(dataUri, column, ContactsContract.Data.RAW_CONTACT_ID + "=?", new String[]{id + ""}, null);
            while (c1.moveToNext()) {
                int dataId = c1.getInt(0);
                String mm = c1.getString(1);
                String data1 = c1.getString(2);

                //data表里的字段是mimetype_id,而这里查询的是mimetype,返回的是字符串
                //通过contentprovider查到的就是字符串,拿不到id
                if (mm.equals(ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) {
                    //描述的是Email
                    contact.setEmail(data1);
                } else if (mm.equals(ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) {
                    //描述的是Phone
                    contact.setPhone(data1);
                } else if (mm.equals("vnd.android.cursor.item/name")) {
                    //描述的是Name
                    contact.setName(data1);
                } else if (mm.equals("vnd.android.cursor.item/sip_address")) {
                    //描述的是Address
                    contact.setAddress(data1);
                }
            }
            contacts.add(contact);
            c1.close();
        }
        c.close();
        return contacts;
    }
}

运行结果
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u010356768/article/details/84559858