【第22期】观点:IT 行业加班,到底有没有价值?

ContentProvider 基础

原创 2015年11月21日 01:41:45
</pre><p></p><pre name="code" class="java">
import java.util.ArrayList;

import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.provider.ContactsContract;
import android.test.AndroidTestCase;
import android.util.Log;

public class ContactsReadTest  {
	private static final String TAG = "ContactsReadTest";
	private Context ctx = null ;
	// 这些Uri的地址在类 android.provider.ContactsContract
	// 定义了各种联系人相关的URI和每一种类型信息的属性信息
	// 表地址
	private static final Uri CONTACTS_URI = ContactsContract.Contacts.CONTENT_URI;
	private static final Uri PHONE_URI = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
	private static final Uri EMAIL_URI = ContactsContract.CommonDataKinds.Email.CONTENT_URI;

	// 字段名
	private static final String _ID = ContactsContract.Contacts._ID;
	private static final String DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME;
	private static final String HAS_PHONE_NUMBER = ContactsContract.Contacts.HAS_PHONE_NUMBER;
	private static final String CONTACT_ID = ContactsContract.Data.CONTACT_ID;

	private static final String PHONE_NUMBER = ContactsContract.CommonDataKinds.Phone.NUMBER;
	private static final String PHONE_TYPE = ContactsContract.CommonDataKinds.Phone.TYPE;
	private static final String EMAIL_DATA = ContactsContract.CommonDataKinds.Email.DATA;
	private static final String EMAIL_TYPE = ContactsContract.CommonDataKinds.Email.TYPE;
	
	
	public ContactsReadTest (Context con) {
		this.ctx = con;
	}
	


	public void testReadContact() {
		
		System.out.println("println called in testReadContact");
		Log.i(TAG,"Im running... testReadContact");
//		ContentResolver resolver = getContext().getContentResolver();
		ContentResolver resolver = ctx.getContentResolver();
		Cursor c = resolver.query(CONTACTS_URI, null, null, null, null);
		Log.d(TAG,"calling testReadContact ...");
		while (c.moveToNext()) {
			int _id = c.getInt(c.getColumnIndex(_ID));
			String displayName = c.getString(c.getColumnIndex(DISPLAY_NAME));
			Log.i(TAG, displayName);
			ArrayList<String> phones = new ArrayList<String>();
			ArrayList<String> emails = new ArrayList<String>();
			String selection = CONTACT_ID + "=" + _id;

			int hasPhoneNumber = c.getInt(c.getColumnIndex(HAS_PHONE_NUMBER));
			if (hasPhoneNumber > 0) {
				Cursor phc = resolver.query(PHONE_URI, null, selection, null,
						null);
				while (phc.moveToNext()) {
					String phoneNumber = phc.getString(phc
							.getColumnIndex(PHONE_NUMBER));
					int phoneType = phc.getInt(phc.getColumnIndex(PHONE_TYPE));
					phones.add(getPhoneTypeNameById(phoneType) + ":"
							+ phoneNumber);
				}
				phc.close();
			}

			Log.i(TAG, "phones:" + phones);

			Cursor emc = resolver.query(EMAIL_URI, null, selection, null, null);
			while (emc.moveToNext()) {
				String emailData = emc
						.getString(emc.getColumnIndex(EMAIL_DATA));
				int emailType = emc.getInt(emc.getColumnIndex(EMAIL_TYPE));
				emails.add(getEmailTypeNameById(emailType) + ":" + emailData);
			}
			emc.close();
			Log.i(TAG,"emails:" + emails);
		}
		c.close();
	}

	private String getEmailTypeNameById(int emailType) {
		switch (emailType) {
		case ContactsContract.CommonDataKinds.Email.TYPE_HOME:
			return "home";
		case ContactsContract.CommonDataKinds.Email.TYPE_WORK:
			return "work";
		case ContactsContract.CommonDataKinds.Email.TYPE_OTHER:
			return "other";
		default:
			return "none";
		}
	}

	private String getPhoneTypeNameById(int phoneTypeId) {
		switch (phoneTypeId) {
		// 直接return 所以省略了break;
		case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
			return "home";
		case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
			return "mobile";
		case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
			return "work";
		default:
			return "none";
		}
	}
}
<pre name="code" class="java">	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		readContactsBtn = (Button) findViewById(R.id.readContactsBtn);
		readContactsBtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				ContactsReadTest ct = new ContactsReadTest(MainActivity.this);
				ct.testReadContact();
			}
		});
	}



// 联系人表,电话号码表和EMAIL表, 是分开放的, 所以要查询联系人信息, 需要三个表的URI地址.
// 联系人表的相关的信息都在 ContactsContract.Contacts类中
// 电话号码和EMAIL地址 相关的表信息在类ContactsContract.CommonDataKinds.Phone (和 Email) 中
// 比如联系人表地址 ContactsContract.Contacts.CONTENT_URI
// 表中的字段名有 _ID 这个ID 相当于的主键
// 而三张表 还需要联系人ID来关联, 所以每张表里面都有联系人ID , 这个ID是外键(ContactsContract.Data.CONTACT_ID)
// 程序中对联系人表进行遍历 , 对每一个Contact表每个_ID , 先找出其 CONTACT_ID
// 再查询联系人表是否存在电话号码 c.getColumnIndex(HAS_PHONE_NUMBER)
// 存在电话的话, 就根据CONTACT_ID 去查询电话号码表  并输出
// 然后根据CONTACT_ID查询邮件表并输出
// 
// 调试的时候 获取resolver原本是
// ContentResolver resolver = getContext().getContentResolver();
// 而且原文用的JUtil , 且让这个类是继承自AndroidTestCase , 应该是JUtil 3版本吧
// 跑的时候getContext() 这个地方始终返回是空,  我用的JUtil 4 测试的 , 后来new 一个activity传进去
// 虽然resolver不再提示空的错误, 测试类里的方法可以跑起来, 但是却没有输出, 不知道什么原因.
// 最后还是不得已换成界面方式 Activity测试.  getContentResolver 需要一个Context, AndroidTestCase这个类 getContext()怎么能调用成功的呢?
// 传递MainActivity.this 后 ContentResolver resolver = ctx.getContentResolver();
// 就正常运行了




            
版权声明:本文为博主原创文章,未经博主允许不得转载。 举报

相关文章推荐

基础总结篇之八:创建及调用自己的ContentProvider

基础总结篇之八:创建及调用自己的ContentProvider 分类: Android 2011-12-09 19:01 7104人阅读 评论(10) 收藏 举报 str...

基础总结篇之八:创建及调用自己的ContentProvider

鍥而捨之,朽木不折;鍥而不捨,金石可鏤。戰國.荀子《勸學篇》 若不能坚持到底,即使是朽木也不能折断;只要坚持不停地用刀刻,就算是金属玉石也可以雕出花饰。用今天的话来说就是:再容易的事情,没有锲而不舍的精神,都不可能做到;再难的事情,只要有坚持不懈的努力,都一定能够做到。希望我们在坚持理想的道路上都...

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

Android 面试题总结之Android 基础ContentProvider(二)

在上一章节Android 面试题总结之Android 基础Activity(一) 我们讲的Activity基础知识。有许多朋友反映看着比较乱,我又回去看了看 ,确实很乱,不够细心。然后我又重新整理...

基础总结篇之八:创建及调用自己的ContentProvider

鍥而捨之,朽木不折;鍥而不捨,金石可鏤。戰國.荀子《勸學篇》 若不能坚持到底,即使是朽木也不能折断;只要坚持不停地用刀刻,就算是金属玉石也可以雕出花饰。用今天的话来说就是:再容易的事情,没有锲而不舍的精神,都不可能做到;再难的事情,只要有坚持不懈的努力,都一定能够做到。希望我们在坚持理想的道路上都...

基础总结篇之八:创建及调用自己的ContentProvider

鍥而捨之,朽木不折;鍥而不捨,金石可鏤。战国.荀子《勸學篇》 若不能坚持到底,即使是朽木也不能折断;只要坚持不停地用刀刻,就算是金属玉石也可以雕出花饰。用今天的话来说就是:再容易的事情,没有锲而...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)