我正在使用ContentProvider将数据插入到SQLiteDatabase中,并且插入失败。我希望有人会看到我做错了什么。这是我的代码:
public Uri insert(Uri uri, ContentValues values) {
int uriType = sURIMatcher.match(uri);
if (uriType != ALLDATA) {
throw new IllegalArgumentException("Invalid URI for insert");
}
SQLiteDatabase sqlDB = mDB.getWritableDatabase();
try {
long newID = sqlDB.insertOrThrow(TABLE_BASEPATH,
null, values);
if (newID > 0) {
Uri newUri = ContentUris.withAppendedId(uri, newID);
getContext().getContentResolver().notifyChange(uri, null);
return newUri;
} else {
throw new SQLException("Failed to insert row into " + uri);
}
} catch (SQLiteConstraintException e) {
Log.i(DEBUG_TAG, "Ignoring constraint failure.");
}
return null;
}
mDB是一个全局变量,设置如下:
private SQLData mDB;
SQLData是我的数据库类的名称。当我在调试器中遵循此代码时,它会验证newID是否大于0并进入if块。前两行执行(newUri和getContext()等的赋值),然后代码跳到底部并返回null,而不是返回newUri。有谁知道为什么?我已经看了this thread,但它似乎不适用于我的情况。提前谢谢!
答案 0 :(得分:1)
我想我以前有这个,它可以是两件事。
首先,它取决于调试器。我确信我已经拥有代码已经通过返回的地方;语句正确,只是假装跳到返回null。
检查通话功能。
其次,通常是我案件中的罪魁祸首。您在旧版本的已编译代码上运行调试器。即运行调试清理。
害怕我不记得确切的原因,我只知道我已经有了这个确切的情况。