`
zhonglunshun
  • 浏览: 135419 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

简单的通讯录操作和其中遇到的问题

阅读更多

最近在做一个东西,用到了通讯录,就把通讯录的东西又复习了一遍,在学习的过程中遇到了一个问题,编译器一直报空指针异常,贴上代码讲解:

public void startQuery1() {
		ContentResolver resolver = getContentResolver();
		Uri uri = Uri.parse("content://com.android.contacts/raw_contacts");
		Uri dataUri = Uri.parse("content://com.android.contacts/data");
		Cursor cursor = resolver.query(uri, null, null, null, null);
		while (cursor.moveToNext()) {
			String id = cursor.getString(cursor.getColumnIndex("contact_id"));
			System.out.println(id);

				Cursor dataCursor = resolver.query(dataUri, null, null, null, null);
				while(dataCursor.moveToNext()){
					String data1 = dataCursor.getString(dataCursor.getColumnIndex("data1"));
					String mimetype = dataCursor.getString(dataCursor.getColumnIndex("mimetype"));
					
					data1 = data1==null?"wu":data1;
					System.out.println(data1);
					System.out.println(mimetype);
				}
				dataCursor.close();

			
		}
		cursor.close();
	}

 在打印id这一行,一直报空指针异常,就是获取到的id为空,我用模拟器编译的时候发现没问题,我就很奇怪,于是连上手机把手机里面的/data/data/com.android.providers.contacts/databases/contacts2.db(联系人数据都在这个表里面)弄出来,一看,原来我的contact_id是直接从3开始的(我删除过一些联系人导致,而增加联系人的时候id是自动增长的),所以才会一个也没打印直接报错了。于是我加了一个判断,如果是空就不打印,这样就解决了。

 

然后现在是所有的数据都读出来了,我们要拿到我们想要的数据就要做一个筛选,我们常用的联系人字段在mimetypes表里面,上面已经获取出来了mimetype,

 我们通过判断mimetype可以筛选到我们要的数据,这就不多说了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics