62

メールアドレスが存在する連絡先の名前のみを表示したい。それ以外の場合、その連絡先名はリストに表示されません。これどうやってするの?誰か助けてくれませんか?

4

7 に答える 7

78
public ArrayList<String> getNameEmailDetails(){
        ArrayList<String> names = new ArrayList<String>();
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                Cursor cur1 = cr.query( 
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                                new String[]{id}, null); 
                while (cur1.moveToNext()) { 
                    //to get the contact names
                    String name=cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                    Log.e("Name :", name);
                    String email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                    Log.e("Email", email);
                    if(email!=null){
                        names.add(name);
                    }
                } 
                cur1.close();
            }
        }
        return names;
    }

上記のメソッドは、電子メール ID を持つ名前の配列リストを返します。

于 2012-04-12T05:14:36.523 に答える
3
if (cur.getCount() > 0) {
          while (cur.moveToNext()) {
              String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
              String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

              Cursor emailCur = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,null,ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{id},null); 
              while (emailCur.moveToNext()) { 
                      String email = emailCur.getString( emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                      Log.e("Email",name+" "+email);
                  } 
                  emailCur.close();
              }

          }
于 2012-04-12T06:51:14.550 に答える
2

別の解決策。

private static final Uri URI_CONTACT_DATA = ContactsContract.Data.CONTENT_URI;
private static final String COLUMN_EMAIL = ContactsContract.CommonDataKinds.Email.ADDRESS;
private static final String COLUMN_DISPLAY_NAME = ContactsContract.Contacts.DISPLAY_NAME_PRIMARY;
private static final String COLUMN_MIMETYPE = ContactsContract.Data.MIMETYPE;

private static final String[] PROJECTION = {
        COLUMN_DISPLAY_NAME,
        COLUMN_EMAIL,
        COLUMN_MIMETYPE
};

private Cursor getCursor() {
    ContentResolver resolver = context.getContentResolver();
    String selection = COLUMN_MIMETYPE + "=?";
    final String[] selectionArgs = {ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE};
    return resolver.query(URI_CONTACT_DATA, PROJECTION, selection, selectionArgs, null);
}

問題は、 のテーブルが連絡先データベース全体ContactsContract.Contacts.CONTENT_URIを保持していることです。これには、電話番号、電子メール、組織、さらには完全にカスタム データが含まれるため、 でフィルタリングしないと使用できません。このデータベースの行には、特定のアカウントに関連する値 (または値、15 個の一般的な列がある) が保持されるため、それらを自分でグループ化する必要がある場合があります。電子メールをオートコンプリートするためにこれが必要だったので、形式 (行ごとの電子メール) は完璧でした。ContactsContract.Data.MIMETYPE

于 2016-03-18T09:24:20.077 に答える
0

連絡先とその電子メール アドレス (存在する場合) を既に取得できる場合は、リストから電子メール アドレスのない連絡先を削除してみませんか?

Android Contacts API の詳細については、こちらを参照してください。

于 2012-04-12T03:39:24.043 に答える