本文来自:安卓航班网
public class EntityDelta implements Parcelable
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
原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=3195&extra=page%3D1