使用ContentProvider插入失败

时间:2012-11-08 21:16:06

标签: android android-contentprovider

我正在使用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,但它似乎不适用于我的情况。提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

首先,它取决于调试器。我确信我已经拥有代码已经通过返回的地方;语句正确,只是假装跳到返回null。

检查通话功能。

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

害怕我不记得确切的原因,我只知道我已经有了这个确切的情况。