这不是我第一次构建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);
}
答案 0 :(得分:2)
您需要在结束事务之前调用setTransactionSuccessful
,否则endTransaction
调用将执行回滚(或不提交)。
db.beginTransaction(); ... try { ... db.setTransactionSuccessful(); } finally { db.endTransaction(); }