我正在尝试使用SQLite
将一些数据插入ContentProvider
表。无论我如何将实例转到WritableDatabase
或ReadableDataBase
,我总是得到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()
方法。那么为什么我会收到这个错误?
答案 0 :(得分:0)
没关系。
在我的DBHelper类中,我正在使用onCreate()
方法关闭数据库。评论该行修正了问题。