我已经在互联网上搜索了这个问题,但无法得到任何有效的回复。 我相信它来自选择,但我不知道它有什么问题。
我收到此错误:
android.database.sqlite.SQLiteException: no such column: data1 (Sqlite code 1): , while compiling: SELECT sort_key, photo_uri ...
执行此代码后检索手机通讯录:
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String no07 = "%07";
String no407 = "%+407";
String selection = "((" + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " NOTNULL) AND ("
+ ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1) AND ("
+ ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " != '' ) AND (("
+ ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '" + no07 + "' ) OR ("
+ ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '" + no407 + "' )))";
Cursor phones = getActivity()
.getContentResolver()
.query(uri, null, selection, null, null);
我将不胜感激。
答案 0 :(得分:1)
根据您的错误,您要查询的URI中没有这样的列greater
。 data1
中包含的ContactsContract.CommonDataKinds.Phone.NUMBER
列应该导致异常。
您可能想要查询来自the overview from the ContactsContract
selection
的ContactsContract的其他表格
ContactsContract.Data表格中的一行可以存储任何类型的个人数据,例如电话号码或电子邮件地址。
答案 1 :(得分:0)
您使用的URI不是用于搜索/过滤联系人,也无权访问这些列:
Uri uri = ContactsContract.Contacts.CONTENT_URI;
您需要使用可以访问您要尝试过滤的列的URI,如下所示:
Uri uri = ContactsContract.Data.CONTENT_URI;
上使用哪些URI以及何时进行了大量细分
如果您需要阅读单个联系人,请考虑使用CONTENT_LOOKUP_URI而不是CONTENT_URI。
如果您需要通过电话号码查找联系人,请使用针对此目的进行优化的PhoneLookup.CONTENT_FILTER_URI。
如果您需要按部分名称查找联系人,例如要生成按类型过滤的建议,请使用CONTENT_FILTER_URI URI。
如果您需要通过电子邮件地址,昵称等某些数据元素查找联系人,请使用针对ContactsContract.Data表的查询。结果将包含联系人ID,姓名等。