0

名前、電話番号、メール、写真などの連絡先の詳細を取得しようとしています。配列リストの連絡先に添付されています。

ただし、電話番号とメールアドレスの両方を持つ連絡先の場合。同じ連絡先名が、最初はメール アドレスで、次に電話番号で 2 回表示され、1 つの連絡先として表示されません (本来あるべきものです)。誰でもこれで私を助けてもらえますか? ティア:)

参考:

public ArrayList<User> getPhoneContact(String paramString, ArrayList<User> paramArrayList)
    throws CustomException
  {

        //Cursor localCursor = null;
        Cursor cursor = null;
        ArrayList localArrayList = new ArrayList();
        User user;
        boolean flag;
        String s1;
        String s2;
        String s6;
        String s5;
        String s3;
        String s4;
        int i;
        int j;
        int k;
        int l;
        int i1;
        try
        {

            cursor = getNamesAndPictures(paramArrayList);

            if(cursor != null && cursor.moveToFirst()){
                user = null;

                i = cursor.getColumnIndex("data1");
                j = cursor.getColumnIndex("contact_id");
                k = cursor.getColumnIndex("display_name");
                l = cursor.getColumnIndex("data1");
                i1 = cursor.getColumnIndex("mimetype");
                s1 = null;

                do{
                    s2 = cursor.getString(j);
                    if(s2 == null)
                        return localArrayList;
                    //if(s2.equals(s1))
                        //return localArrayList;
                    user = new User();

                    s1 = s2;
                    s3 = cursor.getString(k);
                    user.setName(s3);
                    user.setContactId(s2);
                    user.setContactType(paramString);
                    s4 = cursor.getString(i1);
                    if(s4 != null){
                        if(s4.equals("vnd.android.cursor.item/phone_v2")){
                            s6 = cursor.getString(i);
                            user.setPhone(s6);
                        }

                        else if(s4.equals("vnd.android.cursor.item/email_v2")){
                                s5 = cursor.getString(l);
                                user.setEmail(s5);

                            }
                    }

                    localArrayList.add(user);
                }while(cursor.moveToNext());

            }
        }
        catch (Exception localException)
        {
          //localException
        }

    finally
    {
      //closeCursor(localCursor);
      closeCursor(cursor);
      closeDatabase();
    }

        return localArrayList;
  }

と:

private Cursor getNamesAndPictures(ArrayList<User> paramArrayList)
  {
    String str1 = prepareContactIdsString(paramArrayList);
    ContentResolver localContentResolver = this.getAppContext().getContentResolver();
    String[] arrayOfString = { "data1", "contact_id", "display_name", "_id", "data1", "mimetype" };
    String str2 = "display_name != 'null' AND ( (mimetype = 'vnd.android.cursor.item/phone_v2'  AND is_primary != -1 )  OR (mimetype = 'vnd.android.cursor.item/email_v2'  AND is_primary != -1 ) ) AND contact_id NOT IN ( " + str1 + ")";
    return localContentResolver.query(android.provider.ContactsContract.Data.CONTENT_URI, arrayOfString, str2, null, "display_name COLLATE LOCALIZED ASC");
  }
4

1 に答える 1

1

これは、データ行を保持するデータ テーブルにクエリを実行するためです。各行には、連絡先に関する何らかの情報が含まれています。たとえば、1 行がメール、1 行が電話番号です。連絡先のみを取得する場合は、ContactsContract.Contacts テーブルをクエリする必要がありますが、それぞれのメールと電話をクエリする必要があります。

http://developer.android.com/guide/topics/providers/contacts-provider.html

于 2013-11-01T09:08:14.913 に答える