0

对于以下方法

 Uri uri = ContentUris.withAppendedId((MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);

我已经阅读了很多示例,但没有一个示例告诉我如何处理参数的“id”部分,我不想分配哪一行,因为这会根据特定图像存储在哪一行而改变。所以我不能硬编码“id”。如何处理?我可以将 id 保留为 null 吗?

编辑

几分钟前我刚刚从一个网站http://www.grokkingandroid.com/android-tutorial-using-content-providers/

     values.clear();
 values.put(Words.WORD, "Zaphod");
 Uri uri = ContentUris.withAppendedId(Words.CONTENT_URI, id);
 long noUpdated = resolver.update(uri, values, null, null)

这是作者的引用,“由于我只更改了一条记录,所以一个带有附加 ID 的 URI 就足够了。但是如果你想更新多个值,你应该使用普通的 URI 和一个选择子句。”

所以他说要使用“正常的 URI 和选择子句”,那么我该怎么做呢?

这是我的选择声明:

     String selection = MediaStore.Images.Media.DATA + "='" + filename +"'";

其中“filename”是一个字符串变量,根据选择的图像而变化,例如,在本例中为 /mnt/sdcard/pic09.png

4

1 回答 1

0

我不确定我是否理解您的问题,但是关于当您询问如何执行正常的 URI 和选择子句时,“技巧”是使用内容提供者您不会将整个选择放在一个参数中:

String selection = MediaStore.Images.Media.DATA + "='" + filename +"'";

而是通过不同的输入变量引入选择类型、选择参数。例如,

 update where MediaStore.Images.Media.DATA equals filename 

变成:

update (uri, contentValues, String selection, String[] selectionArgs)

其中 uri 指向表(而不是行)内容值指向 ContentValues 对象,您的新值选择必须包含要比较的字段 + 比较类型 + 问号,如

MediaStore.Images.Media.DATA + " = ?";

And selection arguments is an array with all the strings replacing question marks on your selection string, so in your case just

{filename}
于 2012-10-26T13:10:57.517 回答