批量插入后ContentProvider为空

时间:2016-01-14 04:01:24

标签: android android-contentprovider bulkinsert android-contentresolver

这不是我第一次构建ContentProviders。但这是我第一次遇到这个问题,我不知道如何解决它。

我做了一个批量插入,返回计数为4.然后我立即查询所有内容,查询返回计数0.我没有删除任何地方。可能导致这种情况的任何想法?

就好像输入ContentProvider的数据以某种方式神秘地丢失了。实际上,这是bulkInsert代码

@Override
public int bulkInsert(Uri uri, ContentValues[] values) {
    final SQLiteDatabase db = mOpenHelper.getWritableDatabase();
    final String tableName = DogContract.DogEntry.TABLE_NAME;

    db.beginTransaction();
    int count = 0;
    try {
        for (ContentValues value : values) {
            long id = db.insert(tableName, null, value);
            if (0 < id) count++;
            Timber.d("insertion id: %s",id);
        }
    } finally {
        db.endTransaction();
    }
    Timber.d("successful bulk insert for count: %s",count);
    getContext().getContentResolver().notifyChange(uri, null);
    return count;
}

和查询

private Cursor getAllDogs(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
        Timber.d("Call to get all getAllDogs");
        SQLiteDatabase db = mOpenHelper.getReadableDatabase();
        return db.query(DogContract.DogEntry.TABLE_NAME, null, null, null, null, null, null);
    }

1 个答案:

答案 0 :(得分:2)

您需要在结束事务之前调用setTransactionSuccessful,否则endTransaction调用将执行回滚(或不提交)。

db.beginTransaction();
...
try {
    ...
    db.setTransactionSuccessful();
} finally {
    db.endTransaction();
}