如何使用ContentProvider获取insert()错误的原因?

时间:2014-08-18 09:40:51

标签: android sqlite android-contentprovider

我有一个代码,使用自定义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没有告诉我这些错误的原因?

1 个答案:

答案 0 :(得分:0)

要获得例外,请改用insertOrThrow