gpt4 book ai didi

android - 重新初始化 SQLite 数据库后抛出异常

转载 作者:行者123 更新时间:2023-11-30 00:07:55 25 4
gpt4 key购买 nike

我在 Android 上重新初始化 SQLite 数据库时遇到问题。

我的异常(exception):

        15152/ch.companyname.projectname E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #3
Process: ch.companyname.projectname, PID: 15117
java.lang.RuntimeException: An error occurred while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:325)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:354)
at java.util.concurrent.FutureTask.setException(FutureTask.java:223)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/user/0/ch.companyname.projectname/files/db_de.sqlite
at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55)
at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1349)
at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1292)
at com.j256.ormlite.android.compat.JellyBeanApiCompatibility.rawQuery(JellyBeanApiCompatibility.java:21)
at com.j256.ormlite.android.AndroidCompiledStatement.getCursor(AndroidCompiledStatement.java:193)
at com.j256.ormlite.android.AndroidCompiledStatement.runQuery(AndroidCompiledStatement.java:72)
at com.j256.ormlite.stmt.SelectIterator.<init>(SelectIterator.java:57)
at com.j256.ormlite.stmt.StatementExecutor.buildIterator(StatementExecutor.java:247)
at com.j256.ormlite.stmt.StatementExecutor.query(StatementExecutor.java:197)
at com.j256.ormlite.dao.BaseDaoImpl.query(BaseDaoImpl.java:277)
at com.j256.ormlite.stmt.QueryBuilder.query(QueryBuilder.java:366)
at com.j256.ormlite.stmt.Where.query(Where.java:480)
at ch.companyname.projectname.business.database.DatabaseAccessBackend$5.queryInBackground(DatabaseAccessBackend.java:151)
at ch.companyname.projectname.business.database.DatabaseAccessBackend$5.queryInBackground(DatabaseAccessBackend.java:144)
at ch.companyname.projectname.business.database.QueryTask.doInBackground(QueryTask.java:28)
at ch.companyname.projectname.business.database.QueryTask.doInBackground(QueryTask.java:11)
at android.os.AsyncTask$2.call(AsyncTask.java:305)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
at java.lang.Thread.run(Thread.java:761) 

正如我所发现的,当打开多个 sqlite 实例时会发生此异常。 https://github.com/couchbase/couchbase-lite-android/issues/1009

我的助手方法:

 private DatabaseHelper getHelper() {
String locale = AppSettingsBackend.getInstance(PreferenceManager.getDefaultSharedPreferences(context)).getAppSettings().get().getLanguage();
if (this.databaseHelper == null || databaseLocale != locale) {
destroyCurrentHelper();

this.databaseLocale = locale;
DatabaseHelper.DATABASE_LOCALE = locale;
this.databaseHelper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
}
return this.databaseHelper;
}

private void destroyCurrentHelper() {
if (this.databaseHelper != null) {
databaseHelper.close();
databaseHelper = null;
}
}

DatabaseAccessBackend 中第 151 行附近的代码:

public void getNavigationItemsForParentId(final int parentId, final QueryTask.Callback<List<NavigationItem>> callback, final List<Integer> ignoreIds) {
new QueryTask<List<NavigationItem>>() {
@Override
protected List<NavigationItem> queryInBackground() throws SQLException {
Where<NavigationItem, Integer> query = getHelper().getNavigationItemDao().queryBuilder().where().eq("ZPARENTID", parentId);
if (ignoreIds != null && ignoreIds.size() > 0) {
query.and().notIn("ZID", ignoreIds);
}
return query.query();
}
}.start(callback);
}

最佳答案

我发现了错误:

只是改变

databaseHelper.close()

OpenHelperManager.releaseHelper();

关于android - 重新初始化 SQLite 数据库后抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48647159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com