我有一个代码,使用自定义ContentProvider将行插入数据库:
Uri contentUri = Uri.withAppendedPath(DataProvider.CONTENT_URI, UserTable.TABLE_NAME);
Uri resultUri = getContext().getContentResolver().insert(contentUri, contentValues);
boolean success = (Long.parseLong(resultUri.getLastPathSegment()) != -1);
insert()方法在ContentProvider中定义如下:
public class DataProvider extends ContentProvider {
// ...
@Override
public Uri insert(Uri uri, ContentValues initialValues) {
String table = getTableName(uri);
SQLiteDatabase database = dbHelper.getWritableDatabase();
long value = database.insert(table, null, initialValues);
return Uri.withAppendedPath(CONTENT_URI, String.valueOf(value));
}
}
我注意到,有时,插入失败的方法是返回行ID等于-1(正如您在第一个代码的第三行中看到的那样,success
应该变为false)。问题是我无法理解原因,因为LogCat没有打印任何与SqlLite相关的异常。
为什么ContentProvider没有告诉我这些错误的原因?