ContentResolver.delete删除ContentProvider中的所有条目

时间:2014-11-27 14:27:44

标签: android android-cursoradapter android-contentresolver

我创建了一个应用程序,我在其中使用我创建的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;
}

0 个答案:

没有答案