3

電話とメールの詳細を含む連絡先のリストを取得して、リストに表示しようとしています。私が今やったことは、3 つの別々のクエリを実行することです。

  1. Contacts.CONTENT_URI から contactCursor への連絡先のリストを取得します。
  2. Phone.CONTENT_ITEM_TYPE からすべての電話番号を phoneCursor に取得します
  3. Email.CONTENT_ITEM_TYPE から emailCursor へのすべてのメールを取得します

次に、contactCursor をループします。すべての連絡先について、phoneCursor と emailCursor をループして、主要な電話番号と電子メールを取得します。ただし、これは読み込みに時間がかかり、連絡先の数が多い場合にはっきりとわかります。最初のステップ自体でこれらすべての詳細を取得できる方法はありますか?

以下はコード スニペットです。

    Cursor contacts = resolver.query(Contacts.CONTENT_URI, 
            CONTACT_PROJECTION, Contacts.HAS_PHONE_NUMBER + " != 0", null, Contacts._ID + " ASC");
    Cursor phone = resolver.query(Data.CONTENT_URI, PHONE_PROJECTION, 
            Data.MIMETYPE + "=? ", 
            new String[]{Phone.CONTENT_ITEM_TYPE}, 
            Data.CONTACT_ID + " ASC");

    Cursor email = resolver.query(Data.CONTENT_URI, EMAIL_PROJECTION, 
            Data.MIMETYPE + "=? ", 
            new String[]{Email.CONTENT_ITEM_TYPE}, 
            Data.CONTACT_ID + " ASC");

    if (contacts!=null && contacts.moveToFirst()) {
        do {

            String contactId = contacts.getString(0);

            if(phone!=null && phone.moveToFirst()){
                do{
                    if(contactId.equalsIgnoreCase(phone.getString(0))){
                        contact.setMobile(phone.getString(1));

                        break;
                    }
                }while(phone.moveToNext());
            }

            if(email!=null && email.moveToFirst()){
                do{
                    if(contactId.equalsIgnoreCase(email.getString(2))){
                        contact.setEmailWork(email.getString(1));
                        break;
                    }
                }while(email.moveToNext());
            }



        } while (contacts.moveToNext());
4

1 に答える 1