Android Contact数据模型之EntityDelta(一)

 EntityDelta的数据模型描述:
        EntityDelta是ValuesDelta的集合,它还实现了Parcelable接口。它包含了主数据(存在ValuesDelta mValues中)和子数据.它把子数据以ValuesDelta的形式按照它们的mimetype存放在HashMap<String, ArrayList<ValuesDelta>> mEntries中(拥有相同的mimetype的ValuesDelta放在同一个ArrayList).

       构造函数

       public EntityDelta()
       创建一个空的EntityDelta

       public EntityDelta(ValuesDelta values)
       创建一个EntityDelta,并用ValuesDelta values来初始化主数据。

       主要成员变量

        private ValuesDelta mValues;
        用于存放主表(主数据),

       private HashMap<String, ArrayList<ValuesDelta>> mEntries = Maps.newHashMap();
       用于存放子表(子数据),子数据以ValuesDelta的形式按照它们的mimetype存放在其中。


       静态成员变量
       public static final Parcelable.Creator<EntityDelta> CREATOR
       注
:该变量因Parcelable而设计。

       主要静态函数
       public static EntityDelta fromBefore(Entity before)
       用Entity before来实例化一个EntityDelta,把Entity before的getEntityValues()得到主数据以ValuesDelta.fromBefore的形式打包成ValuesDelta并赋予mValues.且设置mValues的mIdColumn为RawContacts._ID。然后用before.getSubValues()得到子数据,然后以ValuesDelta.fromBefore的形式打包成ValuesDelta并放入mEntries。

       注1:这里的Entity before对应一个RawContacts的数据。
       注2:该函数在把Entity转化成EntityDelta的过程中,把Entity的子数据的Uri uri丢失了。

       因为对于update操作可以通过ValuesDelta的id就可以确定它的位置(当然Uri uri也可以确定,毕竟Data.CONTENT_URI是固定)。

       对于删除操作,有主数据的信息就可以了。

       public static EntityDelta mergeAfter(EntityDelta local, EntityDelta remote)

       用EntityDelta remote对EntityDelta local进行mergeAfter操作。它主要是通过对EntityDelta local和EntityDelta remote中的ValuesDelta进行相应的ValuesDelta的mergeAfter操作来实现mergeAfter操作。对于主数据是直接对他们进行mergeAfter操作。对于子数据,是对同id(即ValuesDelta的mIdColumn值相同)的ValuesDelta进行mergeAfter操作。最后返回新的EntityDelta local。

        注1:EntityDelta local可以为null,这时会创建一个空的EntityDelta以便处理。
        注2:mergeAfter操作是针对EntityDelta local而进行,所以它会被改变。

        主要成员函数

        public ValuesDelta getValues()
        返回主数据mValues。

       public boolean isContactInsert()
       返回是否是Insert操作,通过调用主数据mValues的isInsert()方法来判断。

       public ValuesDelta getPrimaryEntry(String mimeType)
       返回PrimaryEntry

       得到MIME类型为mimeType的PrimaryEntry。找到MIME类型为mimeType的ValuesDelta且它的isPrimary()为true,就返回该ValuesDelta。

       如果没找到但MIME类型为mimeType的ValuesDelta的ArrayList<ValuesDelta>至少有一个,则返回该列表上的第一个ValuesDelta。否则返回null。

       public ValuesDelta getSuperPrimaryEntry(String mimeType)
       返回SuperPrimaryEntry

       它直接调用getSuperPrimaryEntry(mimeType, true)。

       public ValuesDelta getSuperPrimaryEntry(String mimeType, boolean forceSelection)
       返回SuperPrimaryEntry
阅读更多
个人分类: 工作记录
上一篇通讯录添加联系人的界面得到用户在文本框里输入的文字
下一篇Android Contact数据模型之EntityDelta(二)
想对作者说点什么? 我来说一句

Android 8.0 系统自带 Contact

2018年05月22日 90.98MB 下载

没有更多推荐了,返回首页

关闭
关闭