首页

源码搜藏网

首页 > 开发教程 > 手机开发 >

Android初级教程之内容提供者获取联系人信息

创建时间:2016-06-13 10:27  

内容提供折详细理论知识请参考之前的博文:http://blog.csdn.net/qq_32059827/article/details/51646513

这里新建了三个联系人信息,通过查看系统联系人源码知道,对三张表进行操作。


联系人数据库

读取联系人

主要代码如下,对代码做出了详细的解释:

package com.itheima.getcontacts;

import com.itheima.getcontacts.domain.Contact;

import android.net.Uri;
import android.os.Bundle;
import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.view.Menu;
import android.view.View;

public class MainActivity extends Activity {

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


    public void click(View v){
    	//通过内容提供者访问联系人数据库
    	ContentResolver cr = getContentResolver();//因为要查三张表,因此知道每张表都对应不同的路径,路径是什么去查看源码  。先查raw_contacts表      字段                         查询条件
    	Cursor cursorContactId = cr.query(Uri.parse("content://com.android.contacts/raw_contacts"), new String[]{"contact_id"}, null, null, null);
    	//里面封装着1、2、3
    	while(cursorContactId.moveToNext()){//封装着1、2、3
    		//,获取到raw_contacts表中的联系人id
    		String contactId = cursorContactId.getString(0);//分别依次得到1、2、3
    		//再查data表                                                                                                                                                      data表的路径                                            data表要三个字段,联系人id已经获得,因此这个表不用再查联系人id
    		Cursor cursorData =  cr.query(Uri.parse("content://com.android.contacts/data"), new String[]{"data1", "mimetype"}, //无mimetype_id只有mimetype。这样更方便,不用再去查第三张表了
    				"raw_contact_id = ", new String[]{contactId}, null);//里面封装着data1、mimetype信息
    		//获取所有字段的名字
    		/*String[] names = cursorData.getColumnNames();
    		for (String string : names) {
				System.out.println(string);
			}*/
    		Contact con = new Contact();
    		while(cursorData.moveToNext()){//里面封装着data1、mimetype信息。例如联系人id=1时,while也要遍历三次
    			String data1 = cursorData.getString(0);//获取某个联系人id下的data1信息。一行信息又对应一个mimetype类型数据
    			String mimetype = cursorData.getString(1);//获取某个联系人id下的mimetype信息
    			//通过mimetype的判断,把data1存入对应的属性
    			if("vnd.android.cursor.item/email_v2".equals(mimetype)){//例如联系人id=1时
    				con.setEmail(data1);
    			}
    			else if("vnd.android.cursor.item/phone_v2".equals(mimetype)){
    				con.setPhone(data1);
    			}
    			else if("vnd.android.cursor.item/name".equals(mimetype)){
    				con.setName(data1);
    			}
    		}
    		System.out.println(con.toString());
    	}
    }
    
}


1
0
   
上一篇:android UI——分组+悬停 listview
下一篇:Android5.0的Palette(调色板)、视图阴影、着色和裁剪介绍

相关内容

热门推荐