6

Androidデバイスに連絡先のリストがあります。すべての連絡先の関連付けられたgroupIdsとGroupNameを取得したいと思います。連絡先Contract.Groups._IDを使用してIDを取得しようとしましたが、取得できません。誰かが連絡先のgroupIDを取得する他の方法を教えてもらえますか?

4

1 に答える 1

7

これが私のやり方です。2 つのクエリを実行しないことで、いじり回してより高速な解決策を見つけることができるでしょう。

アイデアは、を使用してデータテーブルからグループの行 ID を取得することGroupMembership.GROUP_ROW_IDです。行 ID を取得したら、それを使用して Groups テーブルにクエリを実行し、グループの名前 (タイトル) を取得します。

多くの場合Groups.TITLE、名前はあまり適切ではなく、おそらくフォーマットするか、検索してより良い名前を見つける必要があります。

連絡先 ID を取得するコードは次のとおりです。

public long getGroupIdFor(Long contactId){
    Uri uri = Data.CONTENT_URI;
    String where = String.format(
            "%s = ? AND %s = ?",
            Data.MIMETYPE,
            GroupMembership.CONTACT_ID);

    String[] whereParams = new String[] {
               GroupMembership.CONTENT_ITEM_TYPE,
               Long.toString(contactId),
    };

    String[] selectColumns = new String[]{
            GroupMembership.GROUP_ROW_ID,
    };


    Cursor groupIdCursor = mContext.getContentResolver().query(
            uri, 
            selectColumns, 
            where, 
            whereParams, 
            null);
    try{
        if (groupIdCursor.moveToFirst()) {
            return groupIdCursor.getLong(0);
        }
        return Long.MIN_VALUE; // Has no group ...
    }finally{
        groupIdCursor.close();
    }
}

グループのタイトルを取得するコードは次のとおりです。

public String getGroupNameFor(long groupId){
    Uri uri = Groups.CONTENT_URI;
    String where = String.format("%s = ?", Groups._ID);
    String[] whereParams = new String[]{Long.toString(groupId)};
    String[] selectColumns = {Groups.TITLE};
    Cursor c = mContext.getContentResolver().query(
            uri, 
            selectColumns,
            where, 
            whereParams, 
            null);

    try{
        if (c.moveToFirst()){
            return c.getString(0);  
        }
        return null;
    }finally{
        c.close();
    }
}
于 2012-08-09T18:42:32.360 に答える