如何更新联系人而不删除已存储的数据?

时间:2011-08-07 14:32:29

标签: android contactscontract

我正在尝试使用同步适配器将我的联系人与网络存储同步。 当我在服务器端询问此服务器的任何contactupdates时,我会获得添加/更改的所有新信息的列表。要更新它们,我使用的是here

所述的首选方法

我的问题是,当我制作一个ContactOperations.newUpdate()并将其从网络服务器获取的所有新/已更改的信息中提取,然后将其应用于ContactsContract.AUTHORITY已存储在手机上的所有信息被删除了吗?!?

我举一个例子让思考清楚:

我的手机上保存了一个名为:John'Dady'Doe的联系人。现在系统调用SyncAdapter,他要求服务器进行任何联系更改,服务器说现在这个联系人的姓氏是“琼斯”。有了这些信息,我构建了一个新的ContactProviderOperation.newUpdate()并通过.withValue()提供并应用它。但Android真正做的是:它刷新所有其他列,现在我的联系人名为“Jones”(givenName和middleName缺失-.-)。

有没有办法阻止Android这样做?我可以传递CALLER_IS_SYNCADAPTER之类的任何参数吗?或者我是否需要制定自己的解决方法(希望不是),比如首先阅读数据记录,应用更新然后将其应用到ContactsContract.AUTHORITY

任何提示都非常感谢!

/ edit:我通过查看SyncAdapterExample进行了进一步的研究,特别是在“更新联系人”部分,但我看到的有点让我感到震惊:Google实际上确实首先阅读了联系人,然后从服务器应用更新并将其重新应用到ContactsContract.AUTHORITY。但他们只处理名字和姓氏,一个电子邮件和两个电话(普通和移动)。在我的情况下,我不想处理所有的联系信息,所以做这样的解决方法是不可行的,除了没有别的办法,我希望不会。希望有人可以为我指明正确的方向。

1 个答案:

答案 0 :(得分:0)

完全是我的错:/

Android正在做的一切正确,I just failed as hard as this guy ...