Android 正在从ContactProvider读取生日,列无效
我正在做一些测试,以了解提供者如何处理事件等 我正在尝试获取特定帐户的所有联系人,然后阅读每个联系人的详细信息以获得生日(如果有) 我第一次尝试做它在一个围棋,但我没有足够的知识,供应商,所以我试图做它在两个步骤知道,只是看看我是否可以得到它 我在此行中得到无效列: Cursor=cr.query(uri,投影,[…] 联系人id是这里的问题。我如何改进第二个查询以获得我想要的数据?我在代码上尝试了各种mod,但毫无结果 谢谢 我使用的代码是:Android 正在从ContactProvider读取生日,列无效,android,android-contentprovider,Android,Android Contentprovider,我正在做一些测试,以了解提供者如何处理事件等 我正在尝试获取特定帐户的所有联系人,然后阅读每个联系人的详细信息以获得生日(如果有) 我第一次尝试做它在一个围棋,但我没有足够的知识,供应商,所以我试图做它在两个步骤知道,只是看看我是否可以得到它 我在此行中得到无效列: Cursor=cr.query(uri,投影,[…] 联系人id是这里的问题。我如何改进第二个查询以获得我想要的数据?我在代码上尝试了各种mod,但毫无结果 谢谢 我使用的代码是: private void readContacts
private void readContacts(){
Cursor contByAccCursor = getContactsByAccounts();
getContactsBirthdays(contByAccCursor);
}
private Cursor getContactsByAccounts() {
Uri uri = ContactsContract.RawContacts.CONTENT_URI;
String[] projection = new String[] {
ContactsContract.RawContacts.CONTACT_ID,
ContactsContract.RawContacts.ACCOUNT_TYPE
};
String where = ContactsContract.RawContacts.ACCOUNT_TYPE + " IN ('com.google', 'vnd.sec.contact.phone', 'com.skype.contacts.sync')";
return activity.getContentResolver().query(uri,
projection,
where,
null,
null);
}
private void getContactsBirthdays(Cursor filteredContacts) {
Uri uri = ContactsContract.Contacts.CONTENT_URI;
String[] projection = new String[] {
//ContactsContract.Contacts.DISPLAY_NAME_PRIMARY,
ContactsContract.CommonDataKinds.Event.CONTACT_ID,
ContactsContract.CommonDataKinds.Event.START_DATE
};
String where =
ContactsContract.Data.MIMETYPE + "= ? AND " +
ContactsContract.CommonDataKinds.Event.TYPE + "=" +
ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY + " AND " +
ContactsContract.CommonDataKinds.Event.CONTACT_ID + "= ?";
String[] selectionArgs;
String sortOrder = null;
StringBuffer sb = new StringBuffer();
ContentResolver cr = activity.getContentResolver();
int accTypeCol = filteredContacts.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE);
while(filteredContacts.moveToNext()){
selectionArgs = new String[] {
ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE,
filteredContacts.getString(filteredContacts.getColumnIndex(ContactsContract.RawContacts.CONTACT_ID))
};
Cursor cursor = cr.query(uri,
projection,
where,
selectionArgs,
sortOrder);
if(cursor.moveToNext()){
String dName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME_PRIMARY));
String bDay = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE));
String accType = filteredContacts.getString(accTypeCol);
sb.append(dName + "("+accType+")" + " - " + bDay);
sb.append("\n");
}
}
Log.d(TAG, sb.toString());
}
好吧,我现在觉得自己很愚蠢。错误是第二个内容,我得到了错误的一个,一定是累了 这是获取正确数据的正确uri:
private void getContactsBirthdays(Cursor filteredContacts) {
Uri uri = ContactsContract.Data.CONTENT_URI;
好吧,我现在觉得自己很愚蠢。错误是第二个内容,我得到了错误的一个,一定是累了 这是获取正确数据的正确uri:
private void getContactsBirthdays(Cursor filteredContacts) {
Uri uri = ContactsContract.Data.CONTENT_URI;