android 访问通讯录时总结的几个小点

来源:互联网 发布:mac 阿里旺旺不能用 编辑:程序博客网 时间:2024/06/05 10:00

当使用ContentResolver对象访问android中存储联系人的数据库contact2时,提供Uri和路径时,其访问的内容总结如下:

/**
*    查询联系人
*/

public void TestVisitContact(){
Uri url =Uri.parse("content://com.android.contacts/contacts");
ContentResolver rs =getContext().getContentResolver();
Cursor cursorData= rs.query(url,new String[]{"display_name_alt"},"contact_id=?",new String[]{String.valueOf(2)}, null);
while(cursorData.moveToNext()){
Log.i("TestVisitContacts",cursorData.getString(cursorData.getColumnIndex("display_name_alt")));
}
}
}

此时,会得到以下的报错信息:

android.database.sqlite.SQLiteException: no such column: contact_id: , while compiling: SELECT display_name_alt FROM view_contacts_restricted WHERE (contact_id=?)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:158)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:114)
at android.content.ContentProviderProxy.bulkQueryInternal(ContentProviderNative.java:330)
at android.content.ContentProviderProxy.query(ContentProviderNative.java:366)
at android.content.ContentResolver.query(ContentResolver.java:262)
at cn.jbit.Contact.test.TestVisitContacts.TestVisitContact(TestVisitContacts.java:19)
at java.lang.reflect.Method.invokeNative(Native Method)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:529)
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1448)
从报错信息中,我们可以得到当提供的路径为contacts时,其实际查询的是view_contacts_restricted视图,而并非contact表,同样的道理,当提供的路径为data时,其查询的是view_data_restricted视图,而并非是data表,今天看视频时,差点跟着那个老师的思路走了,后来仔细研究了半天,才发现这个知识点,其中路径和视图 的对应关系是可以看出来的,就是“view_路径_restricted”相对应,在这里和大家分享一下。上面说到的路径是指Uri中authority后面的部分,即下面红色的部分:

Uri url =Uri.parse("content://com.android.contacts/contacts");

只要你在Uri中提供的路径对应的视图中有的字段都可以通过查询得到。