-1

1 つのグループ (たとえば、家族) のすべての詳細を取得しようとしています。

コード:

Cursor c = managedQuery(Data.CONTENT_URI, new String[] {
            Contacts.DISPLAY_NAME, Contacts._ID,GroupMembership.CONTACT_ID },
            GroupMembership.GROUP_ROW_ID + " = ?",
            new String[] { groupID }, Phone.TIMES_CONTACTED + " DESC");

名前と写真を取得:

while (c.moveToNext()&&temp_id<30)
        {           
            String id = c.getString(personIdx);

            //c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
            Log.e("myTag", id); 

            // get name
            try{
                personNameText = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

            }catch (Exception e) {
                e.printStackTrace();
            }
            // get photo
            try{
                bmp = loadContactPhoto(getContentResolver(),Long.parseLong( id));
                bmp = bmp.createScaledBitmap(bmp, getResources().getDrawable(R.drawable.contact).getIntrinsicWidth(),
                        getResources().getDrawable(R.drawable.contact).getIntrinsicHeight(), false);

            }catch (Exception e) {
                // TODO: handle exception
            }

            // get number and email
            try
            {
                String hasPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

                if ( hasPhone.equalsIgnoreCase("1"))
                    hasPhone = "true";
                else
                    hasPhone = "false" ;

                if (Boolean.parseBoolean(hasPhone)) 
                {   

                    getNumbers(id);
                }
            }catch (Exception e) {
                e.printStackTrace();
            }

            // get email
            String email = "";
            try{
                Cursor emailCur = getContentResolver().query( 
                        ContactsContract.CommonDataKinds.Email.CONTENT_URI, 
                        null,
                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                        new String[]{id}, null); 

                while (emailCur.moveToNext()) { 
                    email = emailCur.getString(
                            emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                } 
                emailCur.close();


            }catch (Exception e) {
                e.printStackTrace();
            }

データベースに挿入

temp_id++;

                insertData(temp_id, bitmaptoByteArray(bmp), phoneNamberText, personNameText,
                        email);

ここに記載されているすべての機能は非常にうまく機能します。問題は、人の名前だけを取得し、他の詳細を取得しないことです。問題は、間違ったIDを取得することだと思います。助けていただければ幸いです!!!

4

1 に答える 1

0

managedQuery()メソッドの2番目の引数である射影は、返す列を指定します。

あなたが得た瞬間:

new String[] {Contacts.DISPLAY_NAME, Contacts._ID,GroupMembership.CONTACT_ID }

他の情報を取得するには、それらをその引数に含める必要があります。連絡先に名前、電話番号、電子メールアドレスを表示する場合、予測は次のようになります。

new String[] {Contacts.DISPLAY_NAME, Phone.NUMBER, Email.ADDRESS} 

連絡先データテーブルで何かを検索するときに使用される定数の概要については、CommonDataKindsを参照してください。

詳細については、こちらをお読みください

于 2012-06-17T21:01:29.280 に答える