0

次のコードを使用して、Androidから連絡先の名前と名前のリストを取得していますが、メールも同時に取得したいと考えています。

Cursor1 = getContentResolver().query(
           public List<String> getFullContactName()
           {
                List<String> name = new ArrayList<String>();
                String[] projection = new String[] {Data.DATA2, Data.DATA3};
                String where = Data.MIMETYPE + "='" + StructuredName.CONTENT_ITEM_TYPE + "'";
                Uri uri = Data.CONTENT_URI;

                ContentResolver contentResolver = getApplicationContext().getContentResolver();
                Cursor cursor = contentResolver.query(uri,projection,where,null,null);
                String firstName, lastName;
                while (cursor.moveToNext())
                {
                    firstName = cursor.getString(cursor.getColumnIndex(Data.DATA2));
                    lastName = cursor.getString(cursor.getColumnIndex(Data.DATA3));
                    name.add(firstName + " " + lastName);     
                    Toast.makeText(getApplicationContext(), "First name"+firstName, Toast.LENGTH_LONG).show();
                    Toast.makeText(getApplicationContext(), "Second name"+lastName, Toast.LENGTH_LONG).show();
                }

                cursor.close();
                cursor = null;
               return name;
            }
Cursor emails = getContentResolver().query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = " + contactId, null, null); 
   while (emails.moveToNext()) { 
      // This would allow you get several email addresses 
      String emailAddress = emails.getString( 
      emails.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); 
   } 
   emails.close();
}
cursor.close(); 

リスト内の詳細を取得してリストビューに表示する必要があるため、1つのカーソルを使用して、名、姓、電子メール、電話番号を一緒に読み取る方法を知る必要があります。単一のカーソルを使用して詳細を取得できるリファレンスを取得していません。

4

2 に答える 2

0

削除する

cursor.close();
cursor = null;

contactIdに渡したCursor emailsが、取得したものと同じであることを確認しCursor cursorてください。 String[] projection

最初の投影では、次のようにできます。

String[] projection = new String[] {
                ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME};

このプロジェクションは、連絡先 ID と連絡先名を取得してから、連絡先 ID と名前を取得します。

String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
 String Name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

次に、2 番目の射影は次のようになります。

String[] projection2= new String[]{
                                 Email.ADDRESS,                 
                                 Email.TYPE

次に、2番目のカーソルを定義して、最初のカーソル内で電子メールを取得します

Cursor cur2 = cr.query(emailURI,projection2,Email.CONTACT_ID + "=" +id,null,null);

ここで、id は最初のカーソルから取得した ID です。

この助けを願っています

于 2012-12-14T16:13:05.073 に答える
0

連絡先の詳細を取得するには、以下のコードを使用します。

public void getContacts(ContentResolver cr) {

    ArrayList<HashMap<String, String>> mContacts = new ArrayList<HashMap<String, String>>();
    HashMap<String, String> mTempObj = new HashMap<String, String>();

    cur = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI,
            null, null, null, null);
    cur.moveToFirst();
    if (cur.getCount() > 0) {
        for (int i = 0; i < cur.getCount(); i++) {
            mTempObj.add("Email", cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)));

            cur.moveToNext();
        }
    }

    cur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            null, null, null, null);
    cur.moveToFirst();
    if (cur.getCount() > 0) {
        for (int i = 0; i < cur.getCount(); i++) {
            mTempObj.add("Number", cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)));

            cur.moveToNext();
        }
    }

    cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null,
            null);
    cur.moveToFirst();
    if (cur.getCount() > 0) {
        for (int i = 0; i < cur.getCount(); i++) {
            mTempObj.add("Name", cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));

            cur.moveToNext();
        }
    }

    cur = cr.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,
            null, null, null, null);
    cur.moveToFirst();
    if (cur.getCount() > 0) {
        for (int i = 0; i < cur.getCount(); i++) {
            mTempObj.add("Address", cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET)));
            mTempObj.add("City", cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY)));
            mTempObj.add("State", cur.getString(cur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION)));

            cur.moveToNext();
        }
    }
    mContacts.add(mTempObj);
}

それはあなたの問題を解決します。

于 2012-12-15T09:02:49.400 に答える