Мне нужно получить контактную информацию (курсор) по электронной почте.Они должны быть разными.Должна быть одна запись на контакт, если у него есть электронная почта.Как это сделать?Я нацеливаюсь на новые контакты API поставляется с 2.0.
1) Я пытался сделать это с помощью CursorJoiner, но происходит странная вещь.Вот мой код:
MatrixCursor matCur = new MatrixCursor(
new String[]{
Contacts._ID,
Contacts.DISPLAY_NAME,
"photo_id",
"starred"
}
);
Cursor newContactCursor = managedQuery(
ContactsContract.Contacts.CONTENT_URI,
new String[]{
Contacts._ID,
Contacts.DISPLAY_NAME,
"photo_id",
"starred"
},
null,
null,
null//Contacts._ID
);
newContactCursor.moveToFirst();
Cursor emailCur = managedQuery(
ContactsContract.CommonDataKinds.Email.CONTENT_URI,
new String[] {
Email.CONTACT_ID,
Email.DATA1
},
null,
null,
Email.CONTACT_ID
);
emailCur.moveToFirst();
CursorJoiner joiner = new CursorJoiner(
newContactCursor,
new String[]{Contacts._ID},
emailCur,
new String[] {Email.CONTACT_ID}
);
for (CursorJoiner.Result joinerResult : joiner) {
switch (joinerResult) {
case LEFT:
// handle case where a row in cursorA is unique
//Log.i(TAG,"L|"+
//newContactCursor.getString(newContactCursor.getColumnIndex("_id")) );
break;
case RIGHT:
// handle case where a row in cursorB is unique
//Log.i(TAG,
//"R|"+
//emailCur.getString(emailCur.getColumnIndex("contact_id")) );
break;
case BOTH:
//Log.i(TAG,
//"L|"+
//newContactCursor.getString(newContactCursor.getColumnIndex("_id"))+
//"|R|"+
//emailCur.getString(emailCur.getColumnIndex("contact_id")) );
Log.i(TAG, newContactCursor.getString(newContactCursor.getColumnIndex("_id"))+"|"+
newContactCursor.getString(newContactCursor.getColumnIndex("display_name"))+"|"+
emailCur.getString(emailCur.getColumnIndex(Email.DATA1)));
String[] columnValues =
{newContactCursor.getString(newContactCursor.getColumnIndex("_id")),
newContactCursor.getString(newContactCursor.getColumnIndex("display_name")),
newContactCursor.getString(newContactCursor.getColumnIndex("photo_id")),
newContactCursor.getString(newContactCursor.getColumnIndex("starred"))
};
matCur.addRow(columnValues);
break;
}
}
Теперь, в чем моя проблема, я получил вывод, как это: в этом журнале его _id |display_name |идентификатор электронной почты, я заменил их из-за проблемы конфиденциальности
1|[contact name]|[email id]
4|[contact name]|[email id]
5|[contact name]|[email id]
6|[contact name]|[email id]
7|
8|
9|
90|
91|
92|
93|
94|
95|
96|
97|
98|
99|
Но вы можете видеть, что он напрямую перепрыгивает с 9 на 90, а затем все 9 9 9, что это?
2) Можем ли мы сделать это, используя отличное ключевое слово?Возможно ли это с такими поставщиками контактов, как ContactsContract?