在开始之前,我知道我正在使用代码中已弃用的API调用来管理联系人,这是因为我试图扩展现有库,而不必对其进行太多更改。我不介意改变它,但是那里有太多的东西,我只是在试验一个想法,不想再写一个完整的框架。
现在回到问题,我试图更新一个联系人,但到目前为止我没有得到任何东西。我可以创建和删除联系人。它们都在模拟器中工作。当我尝试更新时,我实际上得到了一个非法的argumentexception:空值消息。相关代码如下。
Uri uri = Uri.parse(fullUri);
ContentValues updateValues = new ContentValues();
// updateValues.put(Contacts.People.DISPLAY_NAME, value);
updateValues.put(Contacts.People.NAME, value);
contentResolver.update(uri, updateValues, null, null);
和下面是我的堆栈跟踪
12-30 00:45:05.819: RpcServer:101(2592): java.lang.IllegalArgumentException: Empty values
12-30 00:45:05.819: RpcServer:101(2592): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:170)
12-30 00:45:05.819: RpcServer:101(2592): at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:140)
12-30 00:45:05.819: RpcServer:101(2592): at android.content.ContentProviderProxy.update(ContentProviderNative.java:507)
12-30 00:45:05.819: RpcServer:101(2592): at android.content.ContentResolver.update(ContentResolver.java:990)
12-30 00:45:05.819: RpcServer:101(2592): at com.fun.rpc.SimpleServer$ConnectionThread.run(SimpleServer.java:91)
有人见过这个问题吗?我试着发送ID作为where子句的一部分,那也不起作用。此外,如果我尝试更新电子邮件地址的代码不会抛出任何错误,但联系人的电子邮件地址没有得到更新。但是当我尝试更新名称时,我得到如上所述的错误。有什么提示或想法吗?如果你需要更多的信息,请告诉我。
欢呼
我参加聚会迟到了,但我的回答如下。
我遇到了同样的错误。
java.lang.IllegalArgumentException: Empty values
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:165)
at android.database.DatabaseUtils.readExceptionFromParcel(DatabaseUtils.java:135)
at android.content.ContentProviderProxy.update(ContentProviderNative.java:572)
at android.content.ContentResolver.update(ContentResolver.java:1672)
...
当我试图改变MediaStore.Images.Media.BUCKET_ID
字段时,我遇到了同样的错误。而MediaStore.Images.Media.DESCRIPTION
字段的更改没有问题。
您可能猜到了,BUCKET_ID
字段作为几个表的关键字段。如果您了解数据库开发的理论。因此,这样的关键字段将不允许被更改。
在您的示例中,这样一个(受保护的)字段是Contacts.People.NAME
。
乌利希期刊指南。从src:
镜像的桶id。这是一个只读属性,从DATA列自动计算。