我创建了一个应用程序,我在其中使用我创建的ContentProvider来跟踪我的应用创建的一些照片。
这个概念很简单。 我捕获一些图像并将图像名称,日期和路径保存到ContentProvider。 然后我使用此内容提供程序在我的应用程序启动时从此ContentProvider加载每次缩略图等。 我使用CursorAdapter和ListActivity来获得完整的图片。
如果用户从文件管理器或我的应用程序中删除图像,我想从ContentProvider中删除该条目。
我有这种方法应该这样做。
private void deletePhotoFromContentProvider(String path){
String[] selectionArgs=new String[]{path};
Log.i(TAG, "Path to delete:" + path);
String whereClause=""+PhotosContract.PHOTO_FILE_PATH+"=?";
int res = mContext.getContentResolver().delete(PhotosContract.CONTENT_URI,
whereClause, selectionArgs);
Log.i(TAG, "Deleted :" + Integer.toString(res));
mContext.getContentResolver().notifyChange(PhotosContract.CONTENT_URI, null);
}
我的表有ID,photo_name,photo_date,photo_file_path。 我基于file_path执行删除,这基本上是唯一的。 我检查了路径,日志打印出正确的路径,但是当我尝试删除时,这将删除所有条目。注意
ContentValues values = initValues();
mContext.getContentResolver().insert(PhotosContract.CONTENT_URI, values);
正常运作。
这也是我的PhotosContract类
public class PhotosContract {
public static final String AUTHORITY = "com.android.testapp.provider";
public static final Uri BASE_URI = Uri
.parse("content://" + AUTHORITY + "/");
public static final String PHOTOS_TABLE_NAME = "photos";
// The URI for this table.
public static final Uri CONTENT_URI = Uri.withAppendedPath(BASE_URI,
PHOTOS_TABLE_NAME);
public static final String _ID = "_id";
public static final String PHOTO_FILE_PATH = "photo_file_path";
public static final String PHOTO_FILE_NAME = "photo_name";
public static final String PHOTO_DATE = "photo_date";
}
我也试过用这样的东西:
String whereClause=""+PhotosContract.PHOTO_FILE_PATH+"=" + path;
int res = mContext.getContentResolver().delete(PhotosContract.CONTENT_URI,
whereClause, null);
但也不起作用。它还会删除我的所有ContentProvider条目。
任何帮助?
提前致谢。
编辑: 我从我的ContentProvider发布我的删除方法:
@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
int rowsDeleted = mDbHelper.getWritableDatabase().delete(
PhotosContract.PHOTOS_TABLE_NAME, arg1, arg2);
getContext().getContentResolver().notifyChange(
PhotosContract.CONTENT_URI, null);
return rowsDeleted;
}