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