本文来自:安卓航班网

原理和getPrimaryEntry(String mimeType)相似。但是只有forceSelection为true的情况下,才在没有找到SuperPrimaryEntry的情况下返回PrimaryEntry,如果PrimaryEntry也没找到,才返回MIME类型为mimeType的ValuesDelta的ArrayList<ValuesDelta>的第一的ValuesDelta,如果ArrayList<ValuesDelta>为空则返回null。

        private ArrayList<ValuesDelta> getMimeEntries(String mimeType, boolean lazyCreate)
        得到指定MIME类型mimeType的ArrayList<ValuesDelta>,如果lazyCreate为true,在IME类型mimeType的ArrayList<ValuesDelta>没被创建的情况下,会创建它并放入HashMap<String, ArrayList<ValuesDelta>> mEntrie中。
        public ArrayList<ValuesDelta> getMimeEntries(String mimeType)
        直接调用getMimeEntries(mimeType, false)。

       public int getMimeEntriesCount(String mimeType, boolean onlyVisible)
       得到指定MIME类型mimeType的ValuesDelta数量。如果onlyVisible是true,则ValuesDelta还必须是isVisible()的。

       public boolean hasMimeEntries(String mimeType)
       返回HashMap<String, ArrayList<ValuesDelta>>中是否有MIME类型mimeType的ArrayList<ValuesDelta>。

       public ValuesDelta addEntry(ValuesDelta entry)
       加入一个ValuesDelta entry。

       public ValuesDelta getEntry(Long childId)
       得到id为Long childId的ValuesDelta

        public int getEntryCount(boolean onlyVisible)
        得到ValuesDelta的数量,如果onlyVisible是true,则ValuesDelta还必须是isVisible()的。

        public boolean equals(Object object)
        返回两个EntityDelta是否相当。只有他们所包括的ValuesDelta一样才相等。
        注:这里的"一样"是指ValuesDelta的equals(Object object)返回true.

        private boolean containsEntry(ValuesDelta entry)
        返回ValuesDelta entry是否已经在了HashMap<String, ArrayList<ValuesDelta>>中。

        public void markDeleted()
        对包含的所有ValuesDelta进行markDeleted()操作。(这里包括主数据ValuesDelta mValues和子数据 HashMap<String, ArrayList<ValuesDelta>>)

        public String toString()
        把所有ValuesDelta进行转化为String.
        private void possibleAdd(ArrayList<ContentProviderOperation> diff,ContentProviderOperation.Builder builder)

在builder不为空的情况下,把builder生成的ContentProviderOperation加入到ArrayList<ContentProviderOperation> diff中。

1:该方法其实应该是static的才对。不知道为什么google没把它写成静态的。也许是google的失误吧。

public void buildAssert(ArrayList<ContentProviderOperation> buildInto)

java代码:

/*** Build a list of {@link ContentProviderOperation} that will assert any* "before" state hasn't changed. This is maintained separately so that all* asserts can take place before any updates occur.*/

用主数据mValues的Id和RawContacts.VERSION生产一个RawContacts.CONTENT_URI上的AssertQuery形builder,并加入ArrayList<ContentProviderOperation> buildInto)。
       注:该函数的真正意义应该是在对数据库操作时(Provide中)进行数据库更新时确保数据的一致性。即数据在我们读到EntityDelta并没有改变过。

       public void buildDiff(ArrayList<ContentProviderOperation> buildInto)
       该函数负责把该EntityDelta转化为ArrayList<ContentProviderOperation>,以便进行数据库操作。它主要是调用ValuesDelta的buildDiff来进行ContentProviderOperation,然后把他们整合起来。

       注1:对于全新的插入操作,需要在操作前把主表mValues的RawContacts.AGGREGATION_MODE设置为RawContacts.AGGREGATION_MODE_SUSPENDED,等子数据都插入完了才设置为RawContacts.AGGREGATION_MODE_DEFAULT。
       注2:对于更新操作,但是子数据有插入操作的同上。
       注3:如果主数据时插入操作,那么子数据也必须是插入操作,否则会抛异常。
       注4:对于全EntityDelta的删除操作,只需要主表的信息就可以了,因为它的每个子表都存有主表的Id(即Data.RAW_CONTACT_ID).
       注5:创建AssertQuery形的builder,可用这样的形式:final ContentProviderOperation.Builder builder = ContentProviderOperation.newAssertQuery(RawContacts.CONTENT_URI)

       protected Builder buildSetAggregationMode(Long beforeId, int mode)
       用Long beforeId, int mode生成update的Builder。

       public int describeContents()
       返回0.// Nothing special about this parcel
       注:该方法来自Parcelable。

       public void writeToParcel(Parcel dest, int flags)
       把主表和子表数据都写到Parcel。
       注:该方法来自Parcelable。

       public void readFromParcel(Parcel source)
       从Parcel source中读取主表和子表数据。

原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=3196&extra=page%3D1

转载于:https://www.cnblogs.com/yyq-quan/archive/2011/09/01/2162343.html

Android Contact数据模型之EntityDelta(二)相关推荐

  1. 【朝花夕拾】Android性能篇之(二)Java内存分配

    前言       原文:[朝花夕拾]Android性能篇之(二)Java内存分配        在内存方面,相比于C/C++程序员,咱们java系程序员算是比较幸运的,因为对于内存的分配和回收,都交给 ...

  2. Android 10.0 PackageManagerService(二)权限扫描-[Android取经之路]

    摘要:PackageManagerService在systemReady()后,进行了/system/etc/permissions中的各种xml进行扫描,进行相应的权限存储,供以后使用 阅读本文大约 ...

  3. Android系列之Fragment(二)----Fragment的生命周期和返回栈

    ​[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/ ...

  4. Android高级控件(二)——SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现...

    Android高级控件(二)--SurfaceView实现GIF动画架包,播放GIF动画,自己实现功能的初体现 写这个的原因呢,也是因为项目中用到了gif动画,虽然网上有很多的架包可以实现,不过我们还 ...

  5. Android特效专辑(十二)——仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View...

    Android特效专辑(十二)--仿支付宝咻一咻功能实现波纹扩散特效,精细小巧的View 先来看看这个效果 这是我的在Only上添加的效果,说实话,Only现在都还只是半成品,台面都上不了,怪自己技术 ...

  6. Android开发笔记(一百二十六)自定义音乐播放器

    MediaRecorder/MediaPlayer 在Android手机上面,音频的处理比视频还要复杂,这真是出人意料.在前面的博文< Android开发笔记(五十七)录像录音与播放>中, ...

  7. Android开发笔记(一百二十三)下拉刷新布局SwipeRefreshLayout

    SwipeRefreshLayout 下拉刷新布局SwipeRefreshLayout是Android又一与时俱进的控件,顾名思义它随着用户手势向下滑动就会触发刷新操作.从实际的下拉效果来看,Swip ...

  8. Android开发笔记(一百二十二)循环器视图RecyclerView

    RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...

  9. android真实项目教程(二)——漫画App初构_by_CJJ

    大家晚上好,我是CJJ,继昨天写好框架之后,今天上班一直在想做什么东西...本来想拿我即将要上交的毕业设计做教程的,但是想想好像在重复工作那样子....呵呵 ... 伟大的先人说过,不要重复制造轮子. ...

最新文章

  1. 提升磁盘IO性能的几个技巧
  2. 提高网站有效流量从三个方面出发
  3. 十五、“一路风光无限好,鸣嘤处处贺新婚。”(2021.5.3)
  4. 十八、深入Python函数
  5. 一起学设计模式 - 单例模式
  6. python学习笔记(六)循环、迭代
  7. 前端学习(3124):react-hello-react之批量传递props
  8. Rational 中 DataPool 的介绍与实际应用
  9. angularJS限制 input-text 只能输入数字
  10. 【Win10技巧】如何设置win10资源管理器打开为“这台电脑”?
  11. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树
  12. Atitti css transition Animation differ区别
  13. word2vec字向量_Anything2Vec:将Reddit映射到向量空间
  14. 6183. 字符串的前缀分数和(每日一难phase2--day18)
  15. 【聚类模型①】k均值聚类算法
  16. 计算机应用基础课程学什么,计算机专业本科课程 主要学什么
  17. 从句 Clauses
  18. python如何计数while循环次数_While循环计数
  19. 性能测试脚本用例模版
  20. 猫是如何躲开影子的?

热门文章

  1. nodejs-模块系统
  2. 【数字信号处理】基本序列 ( 正弦序列 | 数字角频率 ω | 模拟角频率 Ω | 数字频率 f | 模拟频率 f0 | 采样频率 Fs | 采样周期 T )
  3. 【数据挖掘】高斯混合模型 ( 与 K-Means 每个步骤对比 | 初始参数设置 | 计算概率 | 计算平均值参数 | 计算方差参数 | 计算高斯分布概率参数 | 算法终止条件 )
  4. 设计模式-Strategy模式
  5. canvas学习笔记(下篇) -- canvas入门教程--保存状态/变形/旋转/缩放/矩阵变换/综合案例(星空/时钟/小球)...
  6. java stringBuilder的用法
  7. 理解JAVA与C的运行机制
  8. 支付宝PC即时到账和手机网站支付同步
  9. Ubuntu常见问题配置
  10. 2014-06-25nbsp;12:55