注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

AggregationExceptions  

2010-06-09 16:25:06|  分类: 电话薄 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
AggregationExceptions
java.lang.Object
        android.provider.ContactsContract.AggregationExceptions
Class Overview
Constants for the contact aggregation exceptions table, 
which contains aggregation rules overriding those used by automatic aggregation. 
This type only supports query and update. Neither insert nor delete are supported. 
该类为用户提供了控制rawContact组不组成一个contact aggregation的方式。
对于该表只能查询和更新。不能插入和删除。插入和删除都是由系统来控制的。
Columns
AggregationExceptions
int     TYPE                 read/write     The type of exception: TYPE_KEEP_TOGETHER, TYPE_KEEP_SEPARATE or TYPE_AUTOMATIC.
long     RAW_CONTACT_ID1     read/write     A reference to the _ID of the raw contact that the rule applies to.
long     RAW_CONTACT_ID2     read/write     A reference to the other _ID of the raw contact that the rule applies to.
数据查询:
        c = managedQuery(AggregationExceptions.CONTENT_URI,
                new String[]{AggregationExceptions.TYPE,AggregationExceptions.RAW_CONTACT_ID1,
                AggregationExceptions.RAW_CONTACT_ID2},
                null, null, null);

注意这里查询到的只是TYPE为TYPE_KEEP_TOGETHER和TYPE_KEEP_SEPARATE的项。
系统的意思就是在这里只是定义Exception的Aggregation规则。默认的为TYPE_AUTOMATIC,自然不在此表。想想如果TYPE_AUTOMATIC得要定义在表中的话,那这个表的数据量就太大了。而且对于TYPE_AUTOMATIC的关系没有必要再定义,不定义就是TYPE_AUTOMATIC。
数据更新:
需要注意的是对于想让一个集合的各元素的TYPE做改变时,最好对各个元素和其他的关系(TYPE)都做改变。
比如想让A,B,C变成一组。不应该简单的让A与B,A与C变成TYPE_KEEP_TOGETHER。
而应该让A与B,A与C,B与C都变成TYPE_KEEP_TOGETHER。
例1
    void doAggregationAllByBatch() {
        Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, null,
                RawContacts.DELETED + "=0", null, null);
//注意这里的条件

        int count = c.getCount();
        int rawContactIdCol = c.getColumnIndex(RawContacts._ID);
        long rawContactIds[] = new long[count];
        int i = 0;
        while (c.moveToNext()) {
            rawContactIds[i++] = c.getLong(rawContactIdCol);
        }
        long rawContactId = 0;
        long rawContactId2 = 0;
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
        for (i = 0; i < count; i++) {
            rawContactId = rawContactIds;
            for (int j = i + 1; j < count; j++) {
                rawContactId2 = rawContactIds[j];
                ops.add(ContentProviderOperation.newUpdate(
                        AggregationExceptions.CONTENT_URI).withValue(
                        AggregationExceptions.TYPE,
                        AggregationExceptions.TYPE_KEEP_TOGETHER).withValue(
                        AggregationExceptions.RAW_CONTACT_ID1, rawContactId)
                        .withValue(AggregationExceptions.RAW_CONTACT_ID2,
                                rawContactId2).build());
            }
        }
        try {
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
例2
    void doAggregationAll() {
        Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, null,
                RawContacts.DELETED + "=0", null, null);
        int count = c.getCount();
        int rawContactIdCol = c.getColumnIndex(RawContacts._ID);
        long rawContactIds[] = new long[count];
        int i = 0;
        while (c.moveToNext()) {
            rawContactIds[i++] = c.getLong(rawContactIdCol);

        }
        long rawContactId = 0;
        long rawContactId2 = 0;
        ContentValues values = new ContentValues();
        for (i = 0; i < count; i++) {
            rawContactId = rawContactIds;
            for (int j = i + 1; j < count; j++) {
                rawContactId2 = rawContactIds[j];

                values.put(AggregationExceptions.TYPE,
                        AggregationExceptions.TYPE_KEEP_TOGETHER);
                values.put(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
                values
                        .put(AggregationExceptions.RAW_CONTACT_ID2,
                                rawContactId2);
                getContentResolver().update(AggregationExceptions.CONTENT_URI,
                        values, null, null);
                values.clear();
                Log.i("hubin",rawContactId+" unlink "+rawContactId2);
            }
        }
    }
例3
    void doUnAggregationAllByBatch() {
        Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, null,
                RawContacts.DELETED + "=0", null, null);

        int count = c.getCount();
        int rawContactIdCol = c.getColumnIndex(RawContacts._ID);
        long rawContactIds[] = new long[count];
        int i = 0;
        while (c.moveToNext()) {
            rawContactIds[i++] = c.getLong(rawContactIdCol);
        }
        long rawContactId = 0;
        long rawContactId2 = 0;
        ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
        for (i = 0; i < count; i++) {
            rawContactId = rawContactIds;
            for (int j = i + 1; j < count; j++) {
                rawContactId2 = rawContactIds[j];
                ops.add(ContentProviderOperation.newUpdate(
                        AggregationExceptions.CONTENT_URI).withValue(
                        AggregationExceptions.TYPE,
                        AggregationExceptions.TYPE_KEEP_SEPARATE).withValue(
                        AggregationExceptions.RAW_CONTACT_ID1, rawContactId)
                        .withValue(AggregationExceptions.RAW_CONTACT_ID2,
                                rawContactId2).build());
            }
        }
        try {
            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
例4
    void doUnAggregationAll() {
        Cursor c = getContentResolver().query(RawContacts.CONTENT_URI, null,
                RawContacts.DELETED + "=0", null, null);
        int count = c.getCount();
        int rawContactIdCol = c.getColumnIndex(RawContacts._ID);
        long rawContactIds[] = new long[count];
        int i = 0;
        while (c.moveToNext()) {
            rawContactIds[i++] = c.getLong(rawContactIdCol);

        }
        long rawContactId = 0;
        long rawContactId2 = 0;
        ContentValues values = new ContentValues();
        for (i = 0; i < count; i++) {
            rawContactId = rawContactIds;
            for (int j = i + 1; j < count; j++) {
                rawContactId2 = rawContactIds[j];

                values.put(AggregationExceptions.TYPE,
                        AggregationExceptions.TYPE_KEEP_SEPARATE);
                values.put(AggregationExceptions.RAW_CONTACT_ID1, rawContactId);
                values
                        .put(AggregationExceptions.RAW_CONTACT_ID2,
                                rawContactId2);
                getContentResolver().update(AggregationExceptions.CONTENT_URI,
                        values, null, null);
                values.clear();
                Log.i("hubin",rawContactId+" unlink "+rawContactId2);
            }
        }
    }
  评论这张
 
阅读(910)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017