Android: ContentResolver.update() 究竟是做什么的?

6
我希望使用方法ContentResolver.update(Uri uri, ContentValues values, String where, String[] selectionArgs)。我知道如何使用它,但是我想知道它对ContentValues做了什么。它是否覆盖所有现有的ContentValues,还是只覆盖给定的ContentValues?
例如,存在以下ContentValues:
A: abc
B: 123
C: 456

update()方法中的ContentValues包含以下内容:

A: asdf
C: 789

然后新的ContentValues将是:(仅覆盖给定值)
A: asdf
B: 123
C: 789

或者是:(覆盖所有值)
A: asdf
C: 789

这是我的代码:

 contentResolver.update(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values, "_data=" + audioFilePath, null);

values 包含应该被覆盖的 ContentValuesaudioFilePath 包含音频文件的路径(即 _data 的值)。

2个回答

3
它只会覆盖给定的ContentValues。

1
谢谢!我可以问一下你这个答案的信息来源是什么吗? - Xander

2
根据文档,ContentResolver.update() 方法所做的只是调用您定义并通过第一个参数提供的 URI 标识的 ContentProvider 的 update 方法。因此,要确切地了解发生了什么,您需要查看您引用的 ContentProvider 的 update() 方法是如何定义的。请参阅 ContentProvider 基础知识文档以了解更多信息。如果您需要帮助正确定义 contentProvider 的 update() 方法,请在此处发布您的代码或提出特定问题。

2
对于一个典型的ContentProvider,其中提供程序上的update()直接路由到SQLiteDatabase上的update(),只有提供的列将被替换,并且在ContentValues中未引用的列将被忽略,因为这就是SQL UPDATE的工作方式。但是,正如@SBerg413所指出的那样,没有保证这种行为;这取决于ContentProvider的实现。调用update()不仅可以用NULL替换跳过的列,还可以发布一条推文并向您的蓝牙启用洗碗机发送消息。 - CommonsWare
@SBerg413,我已经更新了我的问题,并附上了我正在使用的代码。您能否从那一行中看出它是否覆盖所有值还是只覆盖给定的值? - Xander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接