0

我正在使用 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。有谁知道为什么?我看过这个线程,但它似乎不适用于我的情况。提前致谢!

4

1 回答 1

1

我想我以前有过这个,它可能是两件事。

首先,它取决于调试器。我确定我已经在代码通过返回的地方得到了它;语句正确,只假装跳到返回空值。

检查调用函数。

其次,通常是我的罪魁祸首。您在旧版本的已编译代码上运行调试器。即运行调试清理。

恐怕我不记得确切的原因,我只知道我遇到过这种确切的情况。

于 2012-11-08T21:21:43.483 回答