2013-10-19 100 views
4

我想使用方法ContentResolver.update(Uri uri, ContentValues values, String where, String[] selectionArgs) 我知道如何使用它,但我想知道它如何处理ContentValues。它覆盖所有现有的ContentValues,还是只覆盖给定的ContentValues?Android:ContentResolver.update()的功能是什么?

因此,例如,这些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包含应该被覆盖并audioFilePath包含路径的AudioFile(这是_data的值)ContentValues

回答

2

它只会覆盖给定的ContentValues。

+0

谢谢!我可以问你这个答案的信息来源吗? – Xander

2

As per the documentation,所有ContentResolver.update()方法都会调用您在第一个参数中提供的URI定义和标识的ContentProvider的update方法。因此,要知道到底发生了什么,您需要查看如何定义您所引用的ContentProvider的update()方法。 Take a look at the ContentProvider basics documentation.如果您需要正确定义contentProvider的update()方法的帮助,请在此处发布您的代码或提出具体的问题。

+2

对于一个典型的'ContentProvider',提供者上的update()直接路由到'SQLiteDatabase'上的'update()',只有提供的列将被替换,并且'ContentValues'中未引用的列将是忽略,因为这是SQL UPDATE的工作原理。但是,正如@ SBerg413所指出的,这种行为并不能保证。它取决于ContentProvider实现。调用update()不仅可以用NULL替换跳过的列,还可以发布Tweet并发送消息给启用了蓝牙的洗碗机。 – CommonsWare

+0

@ SBerg413,我用我正在使用的代码更新了我的问题。你可以从那一行中看出它是覆盖所有的值还是只是给定的? – Xander