2

在开始之前,我知道我正在使用代码中已弃用的 API 调用来管理联系人,这是因为我正在尝试扩展现有库而无需对其进行太多更改。我不介意改变它,但是那里的东西太多了,我只是在试验一个想法,不想再写一个完整的框架。

所以现在谈到这个问题,我正在尝试更新联系人,但到目前为止我还没有得到任何结果。我可以创建和删除联系人。他们都在模拟器中工作。当我尝试更新时,我实际上收到了一个非法参数异常:空值消息。相关代码如下。

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 子句的一部分发送,但这也不起作用。此外,如果我尝试更新电子邮件地址,代码不会引发任何错误,但联系人的电子邮件地址不会得到更新。但是当我尝试更新名称时,我得到了上述错误。请问有什么提示或想法吗?如果您需要更多信息,请告诉我。

干杯

4

1 回答 1

0

我参加聚会迟到了,但我的回答如下。

我遇到了同样的错误。

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.

更新。从源代码:

图像的桶 id。这是从 DATA 列自动计算的只读属性。

于 2018-09-11T09:45:19.583 回答