Android只能在联系人中列出电子邮件的情况下获取光标

Android只能在联系人中列出电子邮件的情况下获取光标,android,contact,Android,Contact,朋友我想要有电子邮件并且按升序排序的联系人 任何人都知道如何获取此列表并进行排序 请帮助我,并提前表示感谢 我正在使用这个代码 MatrixCursor matCur = new MatrixCursor(new String[] { Contacts._ID, Contacts.DISPLAY_NAME, "photo_id", "starred" }); Cursor cEmail = WP7Main.this.managedQ

朋友我想要有电子邮件并且按升序排序的联系人

任何人都知道如何获取此列表并进行排序

请帮助我,并提前表示感谢

我正在使用这个代码

        MatrixCursor matCur = new MatrixCursor(new String[] { Contacts._ID,
                Contacts.DISPLAY_NAME, "photo_id", "starred" });
        Cursor cEmail = WP7Main.this.managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        cEmail.moveToFirst();
        if (cEmail.moveToFirst()) 
        {
            // String name =
            // cursor.getString(cursor.getColumnIndexOrThrow(People.NAME));

            String contactId = cEmail.getString(cEmail.getColumnIndex(ContactsContract.Contacts._ID));

            Cursor emails = WP7Main.this.getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            null,ContactsContract.CommonDataKinds.Email.CONTACT_ID+ " = " + contactId, null, null);

            String emailAddress = "";
            while (emails.moveToNext()) 
            {
                // This would allow you get several email addresses

                if (emails.getString(emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)) != null)
                {
                    String[] columnValues = {
                            cEmail.getString(cEmail
                                    .getColumnIndex("_id")),
                                    cEmail.getString(cEmail
                                    .getColumnIndex("display_name")),
                                    cEmail.getString(cEmail
                                    .getColumnIndex("photo_id")),
                                    cEmail.getString(cEmail
                                    .getColumnIndex("starred")) };
                    matCur.addRow(columnValues);

                }

            }
            emails.close();
        }
使用此查询:
Cursor c = getContentResolver().query(Data.CONTENT_URI,
        new String[]{Data.CONTACT_ID, Data.DISPLAY_NAME, Email.ADDRESS},
        Data.MIMETYPE + "=?", new String[] {Email.CONTENT_TYPE}, Data.DISPLAY_NAME /* use Email.ADDRESS if you want to sort it using that*/);
游标c=getContentResolver().query(Data.CONTENT\u URI,
新字符串[]{Data.CONTACT_ID,Data.DISPLAY_NAME,Email.ADDRESS},
Data.MIMETYPE+“=?”,新字符串[]{Email.CONTENT\u TYPE},Data.DISPLAY\u NAME/*如果要使用该*/)对其进行排序,请使用Email.ADDRESS;

使用此查询:
Cursor c = getContentResolver().query(Data.CONTENT_URI,
        new String[]{Data.CONTACT_ID, Data.DISPLAY_NAME, Email.ADDRESS},
        Data.MIMETYPE + "=?", new String[] {Email.CONTENT_TYPE}, Data.DISPLAY_NAME /* use Email.ADDRESS if you want to sort it using that*/);
游标c=getContentResolver().query(Data.CONTENT\u URI,
新字符串[]{Data.CONTACT_ID,Data.DISPLAY_NAME,Email.ADDRESS},
Data.MIMETYPE+“=?”,新字符串[]{Email.CONTENT\u TYPE},Data.DISPLAY\u NAME/*如果要使用该*/)对其进行排序,请使用Email.ADDRESS;

试试这个:

/**
 * @return A managed cursor of email contacts for the given activity.
 */
public static Cursor buildFilteredEmailCursor(Activity activity) {
    final String my_sort_order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    String my_selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
    String[] eproj = new String[]{
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Email.DATA};
    Uri uri = android.provider.ContactsContract.CommonDataKinds.Email.CONTENT_URI;
    return activity.managedQuery(uri, eproj, my_selection, null, my_sort_order);
}
试试这个:

/**
 * @return A managed cursor of email contacts for the given activity.
 */
public static Cursor buildFilteredEmailCursor(Activity activity) {
    final String my_sort_order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";
    String my_selection = ContactsContract.Contacts.IN_VISIBLE_GROUP + " = '1'";
    String[] eproj = new String[]{
        ContactsContract.Contacts._ID,
        ContactsContract.Contacts.DISPLAY_NAME,
        ContactsContract.CommonDataKinds.Email.DATA};
    Uri uri = android.provider.ContactsContract.CommonDataKinds.Email.CONTENT_URI;
    return activity.managedQuery(uri, eproj, my_selection, null, my_sort_order);
}


你面临什么问题?就像你在这篇文章中没有提到的获取记录或对记录进行排序一样,我也没有问这个问题。我知道,但你没有提到你的问题吗?我的问题是什么?我的问题都是,获得电子邮件联系并对其进行排序。好的,发布你的代码。你在尝试什么?你面临什么问题?就像你在这篇文章中没有提到的获取记录或对其进行排序一样,我也没有问这个问题。我知道,但你没有提到你的问题到底是什么,我的问题都是,获取电子邮件联系人并对其进行排序OK post your code您在尝试什么?当我使用此选项时,会出现此错误java.lang.IndexOutofBounds异常:无效索引0,大小为0您的数据库中是否有联系人?这对我有效。你能添加你正在使用的全部代码吗?我正在Froyo(2.2)上测试这个,使用Data.DATA1代替Email.address当我使用这个时,这个错误就来了java.lang.IndexOutOfBoundsException:无效索引0,大小是0你的数据库中有联系人吗?这对我有用。你能添加你正在使用的全部代码吗?我正在Froyo(2.2)上测试这个,用Data.DATA1代替Email.address注意:我在几个小时前投了更高的票,但回来是为了得到那张票。您必须意识到,通过这个答案,您正在查询CommonDataTypes.Email表。即使你说要选择Contacts contract.Contacts.\u ID,这只会转移到“\u ID”列,在电子邮件表中,这意味着它将与电子邮件关联,而不是与联系人ID关联。再次,请注意这个可能的答案,因为它可能会导致不一致,除非你知道你在做什么。注意:我几个小时前投了高票,但我回来是为了收回那张选票。您必须意识到,通过这个答案,您正在查询CommonDataTypes.Email表。即使您说要选择Contacts contract.Contacts.\u ID,这只会传递到“\u ID”列,在电子邮件表中,这意味着它将与电子邮件关联,而不是与联系人ID关联。再次,请注意这个可能的答案,因为除非您知道自己在做什么,否则它可能会导致不一致。