我在堆栈溢出中发现了该线程。我尝试了first answer。没用在delete()返回true之后,照片仍在手机的“照片”应用程序中。我尝试了this second answer。也没用。
然后我尝试了this third answer。
这是我对第三个答案进行一些修改后的代码。 imagesEncodedList是我要删除的照片的字符串文件路径的ArrayList:
String[] selectionArgs = new String[imagesEncodedList.size()];
for(int i=0; i<imagesEncodedList.size();i++) {
selectionArgs[i]=imagesEncodedList.get(i);
}
//delete original
// Set up the projection (we only need the ID)
String[] projection = { MediaStore.Images.Media._ID };
// Match on the file path
String selection = MediaStore.Images.Media.DATA + " = ?";
// Query for the ID of the media matching the file path
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
ContentResolver contentResolver = getContentResolver();
Cursor c = contentResolver.query(queryUri, projection, selection,
selectionArgs, null);
if (c.moveToFirst()) {
// We found the ID. Deleting the item via the content provider will also
remove the file
long id = c.getLong(c.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
Uri deleteUri =
ContentUris.withAppendedId(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, id);
contentResolver.delete(deleteUri, null, null);
} else {
// File not found in media store DB
}
c.close();
我不知道contentResolver.query()是如何工作的。我运行了我的应用程序,并显示错误消息,指的是游标c初始化的行:
原因:java.lang.IllegalArgumentException:无法绑定索引2的参数,因为索引超出范围。该语句有1个参数。
哪个参数位于索引2?什么只有1个参数?