课程概述
数据表的常量,其中包含绑定到原始联系人。数据表的每一行通常用于存储单个接触件信息(如电话号码)及其关联的元数据(例如它是工作号码还是家庭号码)。
数据类型
数据是一个通用表,可以保存任何类型的联系人数据。存储在给定行中的数据类型由行的MIMETYPE公司
值,它决定常规列数据A1
通过数据15
.例如,如果数据类型为电话。目录_ TEM_TYPE
,然后是列数据A1
存储电话号码,但如果数据类型是电子邮件。目录_ TEM_TYPE
,然后数据A1
存储电子邮件地址。同步适配器和应用程序可以引入自己的数据类型。
ContactsContract定义了少量预定义的数据类型,例如。联系人合同。通用数据种类。电话
,联系人合同。通用数据种类。电子邮件
等作为这些类为DATA1等定义了特定于数据类型的别名,非常方便。例如,电话。编号
与相同数据。数据A1
.
数据A1
是索引列,应用于预期在查询选择中使用最频繁。例如,在表示电子邮件地址的行大小写数据A1
应该很可能用于电子邮件地址本身,而数据A2
等可以是用于电子邮件地址类型等辅助信息。
按照惯例,数据15
用于存储BLOB(二进制数据)。
给定帐户类型的同步适配器必须正确处理每种数据类型用于相应的原始触点。否则可能导致丢失或损坏的数据。
同样,您应该避免为其他人引入新类型的数据参与方的帐户类型。例如,如果为添加数据行谷歌账户拥有的原始联系人的“最喜欢的歌曲”,不会同步到服务器,因为Google同步适配器不知道如何处理这种数据类型。因此,新的数据类型通常是引入了新的帐户类型,即新的同步适配器。
批处理操作
可以使用传统的插入(Uri,ContentValues)
,更新(Uri,ContentValues,String,String[])
和delete(Uri,String,String[])
方法,但基于更新的机制在一批内容提供者操作
将证明是更好的几乎在所有情况下都有选择。批处理中的所有操作都在单个事务,确保电话端和服务器端原始触点的状态总是一致的。此外,基于批处理的这种方法要有效得多:不仅是数据库操作在单个事务中执行时速度更快,但也可以发送一批向内容提供者发送命令可以节省大量上下文切换时间在您的进程和内容提供程序运行的进程之间。
使用批处理操作的另一方面是,大批处理可能会锁定长时间关闭数据库,防止其他应用程序访问数据并可能导致ANR(“应用程序没有响应”)对话框。)
为了避免数据库被锁定,请确保插入“屈服点”在批次中。屈服点向内容提供商指示执行下一个操作可以提交已经发生的更改已发出,屈服于其他请求,打开另一个事务并继续处理操作。屈服点不会自动提交事务,但仅当有另一个请求等待数据库。通常,同步适配器应在批次中每个原始接触操作序列的开始。请参阅允许产量(布尔值)
.
操作
- 插入
-
可以使用传统的插入(Uri,ContentValues)
方法。多行应始终作为批插入。
传统插件示例:
ContentValues值=新ContentValues();values.put(Data.RAW_CONTACT_ID,rawContactId);values.put(Data.MMETYPE,Phone.CONTENT_ITEM_TYPE);values.put(电话号码,“1-800-GOOG-411”);values.put(Phone.TYPE,Phone.TypeE_CUSTOM);values.put(Phone.LABEL,“免费目录帮助”);Uri数据Uri=getContentResolver().insert(Data.CONTENT_Uri,values);
使用ContentProviderOperations也是如此:
阵列列表<ContentProviderOperation>ops=new ArrayList<ContentProviderOperation>();ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValue(数据.RAW_CONTACT_ID,原始联系人ID).withValue(数据.MMETYPE,电话.CONTENT_ITEM_TYPE).withValue(电话号码,“1-800-GOOG-411”).withValue(电话.TYPE,电话.TYPE_CUSTOM).withValue(电话.LABEL,“免费目录帮助”).build());getContentResolver().applyBatch(ContactsContract.AUTHORITY,操作);
- 更新
-
与插入一样,更新可以增量完成,也可以成批完成,批处理模式是首选方法:
阵列列表<ContentProviderOperation>ops=new ArrayList<ContentProviderOperation>();ops.add(ContentProviderOperation.newUpdate(Data.CONTENT_URI).withSelection(Data.ID+“=?”,新字符串[]{String.valueOf(dataId)}).withValue(电子邮件.DATA,“somebody@android.com").build());getContentResolver().applyBatch(ContactsContract.AUTHORITY,操作);
- 删除
-
就像插入和更新一样,可以使用delete(Uri,String,String[])
方法或使用ContentProviderOperation:
阵列列表<ContentProviderOperation>ops=new ArrayList<ContentProviderOperation>();ops.add(ContentProviderOperation.newDelete(Data.CONTENT_URI).withSelection(Data.ID+“=?”,新字符串[]{String.valueOf(dataId)}).build());getContentResolver().applyBatch(ContactsContract.AUTHORITY,操作);
- 查询
-
- 查找给定联系人的给定类型的所有数据
-
光标c=getContentResolver().query(Data.CONTENT_URI,new String[]{数据_ID,电话号码,电话类型,电话标签},数据。CONTACT_ID+“=?”+“AND”+数据。MIMETYPE+“='”+电话。CONTENT_ITEM_TYPE+“”,new String[]{String.valueOf(contactId)},null);
- 查找给定原始联系人的给定类型的所有数据
-
光标c=getContentResolver().query(Data.CONTENT_URI,new String[]{数据_ID,电话号码,电话类型,电话标签},数据。原始联系人ID+“=?”+“AND”+数据。MIMETYPE+“='”+电话。CONTENT_ITEM_TYPE+“”,new String[]{String.valueOf(rawContactId)},null);
- 查找给定原始联系人的所有数据
- 大多数同步适配器都希望读取原始联系人的所有数据行以及原始接触本身。为此,您应该使用
联系人合同。原始联系人实体
。另请参阅联系人合同。原始联系人
.
柱
许多列通过内容_ URI
查询。为了您的最佳表现应该显式地指定只对您需要的那些列的投影。
最近关联状态更新中的一些列也可用通过隐式联接。
关联原始联系人中的一些列也可以通过隐式联接。其他列在此中被排除在外,因为它们不感兴趣上下文。
关联的聚合联系人表的ID列联系人合同。联系人
可用通过隐式联接联系人合同。原始联系人
表,参见上文。此表中的其余列还包括可用,通过隐式联接。这个方便查找单个数据元素的值,例如电子邮件地址。
总结
领域 |
公众的静止的最终的乌里 |
内容_ URI |
此表的content://样式URI,它请求一个目录符合选择条件的数据行数。 |
[展开]
继承的方法 |
来自班级java.lang.Object(java.lang.对象)
对象
|
克隆()
创建并返回此对象 .
|
布尔值
|
等于(对象o)
将此实例与指定对象进行比较,并指示它们是否都是平等的。
|
空隙
|
最后确定()
当垃圾收集器检测到此实例不再可访问时调用。
|
最终的等级<?>
|
获取类()
|
整数
|
哈希代码()
返回此对象的整数哈希代码。
|
最终的空隙
|
通知()
导致线程等待此对象的监视器(通过呼叫其中一个wait() 方法)被唤醒。
|
最终的空隙
|
通知全部()
导致所有等待此对象监视器的线程(通过呼叫其中一个wait() 方法)被唤醒。
|
字符串
|
toString(字符串)()
返回一个字符串,该字符串包含此对象。
|
最终的空隙
|
等待()
使调用线程等待另一个线程调用通知() 或notifyAll() 方法。
|
最终的空隙
|
等待(长毫微秒,整数纳米)
使调用线程等待另一个线程调用通知() 或notifyAll() 方法或直到指定的超时过期。
|
最终的空隙
|
等待(长毫)
使调用线程等待另一个线程调用通知() 或notifyAll() 方法或直到指定的超时过期。
|
|
常量
公众静态最终的字符串
内容类型
常量值:
“vnd.android.cursor.dir/data”
公众静态最终的字符串
可见_仅联系人
的布尔参数内容_ URI
.这指定是否应筛选返回的数据项以显示仅属于可见联系人的数据项。
常量值:
“visible_contacts_only”
领域
公众静态最终的乌里
内容_ URI
此表的content://样式URI,它请求一个目录符合选择条件的数据行数。
公共方法