Android Contact数据模型之EntityDelta(二)

转载 2012年03月31日 11:50:53
   原理和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中读取主表和子表数据。

Android使用Contact数据模型来批量插入联系人

使用Contact数据模型来批量插入联系人主要需要contact数据模型的以下两文件:   contacts.model下的:   EntitySet.java   EntityDelta.ja...
  • shanghaibao123
  • shanghaibao123
  • 2015年05月27日 15:45
  • 1063

Contact Form 7邮件发送失败的解决办法

Contact Form 7邮件发送失败的解决办法 一、contact form 7无法发送邮件的原因 对mail()函数的不支持。 Contact Form 7表单提交失败在使用过程中...
  • csnewdn
  • csnewdn
  • 2017年02月24日 19:45
  • 759

Jamie's Contact Groups(二分图多重匹配+二分)(网络流)

Jamie's Contact Groups Time Limit:7000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u...
  • u014665013
  • u014665013
  • 2016年05月08日 11:47
  • 862

oracle拼接字符串处理,wm_contact函数使用

CREATE OR REPLACE VIEW NEWSOUTER_V AS select t.ID, t.MAIN_TITLE, t.SUBTITLE, t....
  • he20101020
  • he20101020
  • 2013年12月24日 11:37
  • 5651

联系苹果人员的方式

目录[-] 第一种:contact us(不推荐,慢,还不知道选什么选项,但是必须知道) 第二种:给苹果公司打电话(强烈推荐) 第一种:contact us(不推荐,慢,...
  • Su_tianbiao
  • Su_tianbiao
  • 2015年11月14日 21:28
  • 808

Contact Form 7使用及发送附件详细方法

Contact Form 7使用及发送附件详细方法 |浏览:3734|更新:2015-03-11 05:39|标签:iWork  1 2 3 4 5 6 7 分步阅读 ...
  • csnewdn
  • csnewdn
  • 2017年02月27日 18:05
  • 210

ORA-03135: connection lost contact的解决方法(未解决本人问题)

ORA-03135: connection lost contact的解决方法 上一篇 / 下一篇  2007-12-14 11:30:25/ 个人分类:DataGuard 查看( 8234 ) /...
  • haiross
  • haiross
  • 2013年10月16日 14:25
  • 6952

Android图片二值化算法

转自: public void binarization(Bitmap img) { width = img.getWidth(); height = img.getHeight(); ...
  • nannan_smile
  • nannan_smile
  • 2014年05月23日 19:34
  • 1742

数据模型的作用和数据模型的三个要素:

试述数据模型的概念,数据模型的作用和数据模型的三个要素: 答案: 模型是对现实世界的抽象。在数据库技术中,表示实体类型及实体类型间联系的模型称为“数据模型”。 数据模型是数据库管理的教学形式框...
  • wjh199133
  • wjh199133
  • 2013年07月04日 23:18
  • 1799

OpenCV4Android开发环境搭建两种方式加上图像二值化

1.环境搭建         进行android开发所需要的环境一般为:eclipse + android sdk + ADT,而OpenCV的开发由于需要编写本地代码(C/C++),因此还需要安装...
  • chenaini119
  • chenaini119
  • 2014年09月20日 09:47
  • 2685
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android Contact数据模型之EntityDelta(二)
举报原因:
原因补充:

(最多只允许输入30个字)