尝试重新打开已关闭的对象:SQLiteDatabase:在Content Provider中

时间:2017-03-26 14:25:18

标签: android android-sqlite android-contentprovider

我正在尝试使用SQLite将一些数据插入ContentProvider表。无论我如何将实例转到WritableDatabaseReadableDataBase,我总是得到attempt to re-open an already-closed object: SQLiteDatabase:

内容提供商:

@Override
public boolean onCreate() {
    helper = DBHelper.getInstance(getContext());
    Log.d(TAG,"OnCreate");
    return true;
}

@Nullable
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
    return helper.getReadableDatabase()
            .query(DBConstants.TABLE_NAME, DBConstants.ALL_COLUMNS,
                    selection,null,null,null,
                    DBConstants.COLUMN_TIMESTAMP_ADDED + " DESC");
}

@Nullable
@Override
public String getType(@NonNull Uri uri) {
    return null;
}

如果我将onCreate()方法更改为:

@Override
public boolean onCreate() {
    helper = DBHelper.getInstance(getContext());
    database = helper.getWritableDatabase();
    Log.d(TAG,"OnCreate");
    return true;
}

当我在类中的任何方法中调用database.getWritableDatabase()时,我立即得到一个带有相同错误的illegalStateException。

在StackOverflow中搜索时,我可以通过调用database.close()方法找到问题。但我使用ContentProvider来管理数据库而不是调用任何close()方法。那么为什么我会收到这个错误?

1 个答案:

答案 0 :(得分:0)

没关系。 在我的DBHelper类中,我正在使用onCreate()方法关闭数据库。评论该行修正了问题。