IllegalStateException:数据库已关闭(使用 ViewPager)

2024-03-09

我对导致此错误的原因感到困惑,因为我已确保正确关闭数据库适配器(至少我认为是)。以下是 LogCat 的说法(所有这些标签的标签都是 AndroidRuntime):

致命异常:主要 java.lang.IllegalStateException:数据库/data/data/com.acedit.assignamo/databases/data.db(conn#0)已经关闭 在 android.database.sqlite.SQLiteDatabase.verifyDbIsOpen(SQLiteDatabase.java:2082) 在 android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:413) 在 android.database.sqlite.SQLiteDatabase.lock(SQLiteDatabase.java:400) 在 android.database.sqlite.SQLiteQuery.fillWindow(SQLiteQuery.java:79) 在 android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:164) 在 android.database.sqlite.SQLiteCursor.onMove(SQLiteCursor.java:147) 在 android.database.AbstractCursor.moveToPosition(AbstractCursor.java:178) 在 android.support.v4.widget.CursorAdapter.getItemId(CursorAdapter.java:225) 在 android.widget.AbsListView.onSaveInstanceState(AbsListView.java:1569) 在 android.view.View.dispatchSaveInstanceState(View.java:9868) 在 android.view.ViewGroup.dispatchFreezeSelfOnly(ViewGroup.java:2310) 在 android.widget.AdapterView.dispatchSaveInstanceState(AdapterView.java:770) 在 android.view.ViewGroup.dispatchSaveInstanceState(ViewGroup.java:2296) 在 android.view.View.saveHierarchyState(View.java:9851) 在 android.support.v4.app.FragmentManagerImpl.saveFragmentViewState(FragmentManager.java:1561) 在 android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:962) 在 android.support.v4.app.FragmentManagerImpl.detachFragment(FragmentManager.java:1233) 在 android.support.v4.app.BackStackRecord.run(BackStackRecord.java:620) 在 android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431) 在 android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431) 在 android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:895) 在 android.support.v4.view.ViewPager.populate(ViewPager.java:772) 在 android.support.v4.view.ViewPager.completeScroll(ViewPager.java:1539) 在 android.support.v4.view.ViewPager.computeScroll(ViewPager.java:1422) 在 android.view.View.getDisplayList(View.java:10406) 在 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597) 在 android.view.View.getDisplayList(View.java:10380) 在 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597) 在 android.view.View.getDisplayList(View.java:10380) 在 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597) 在 android.view.View.getDisplayList(View.java:10380) 在 android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:2597) 在 android.view.View.getDisplayList(View.java:10380) 在 android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:875) 在 android.view.ViewRootImpl.draw(ViewRootImpl.java:1910) 在 android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1634) 在 android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2442) 在 android.os.Handler.dispatchMessage(Handler.java:99) 在 android.os.Looper.loop(Looper.java:137) 在 android.app.ActivityThread.main(ActivityThread.java:4575) 在 java.lang.reflect.Method.invokeNative(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:511) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 在dalvik.system.NativeStart.main(本机方法)

My code:

public Cursor fetchIncompleteAssignments(Short course) {
    DbAdapter adapter = new DbAdapter(context, null, Values.ASSIGNMENT_TABLE);
    adapter.open();

    Cursor r;
    if (course == null) // Fetching from all courses
        r = adapter.fetchAllWhere(Values.ASSIGNMENT_LIST_FETCH, Values.ASSIGNMENT_KEY_STATUS + "=" + 0, Values.ASSIGNMENT_KEY_DUE_DATE);
    else
        r = adapter.fetchAllWhere(Values.ASSIGNMENT_LIST_FETCH, Values.ASSIGNMENT_KEY_COURSE + "=" + course
            + " AND " + Values.ASSIGNMENT_KEY_STATUS + "=" + 0, Values.ASSIGNMENT_KEY_DUE_DATE);
    adapter.close();
    return r;
}

// Part of DbAdapter:
public DbAdapter open() throws SQLException {
    dbHelper = new DatabaseHelper(context);
    db = dbHelper.getWritableDatabase();
    return this;
}

public void close() {
    if (db != null) {
        try {
            db.close();
            dbHelper.close();
        } catch (NullPointerException e) {
            Log.e("Close", "Error: " + e + " " + e.getMessage());
        }
    } else
        Log.e("Close", "Error! db \"" + DATABASE_TABLE + "\" is null.");
}

The Cursor从返回fetchAllAssignments()用于填充ListView通过习俗CursorAdapter. The ListView是a的内容ListFragment,并且 ViewPager 的每一页中显示此 ListFragment 的多个实例(一个用于显示所有课程的作业,然后一个用于显示每个单独课程的页面)。

关于哪里出了问题有什么想法吗?据我所知,我正在正确关闭数据库。如果您需要更多代码,请告诉我。提前致谢!

EDIT:数据从数据库中提取出来,并且也填充到 ListView 中。我可以滑动各个页面,但每当片段停止时它似乎都会崩溃。当我启动另一个活动时,它经常会崩溃,但并非总是如此。当我滑动页面时,它偶尔也会崩溃,尽管这种情况很少。这是我的 Fragment 的 onPause() 方法(我没有 onStop() 或 onDestroy()):

public void onPause() {
    super.onPause();
    if (!assignmentsCursor.isClosed()) {
        assignmentsCursor.close();
        assignmentsCursor = null;
    }
}

In my onResume()我只是从数据库重新加载列表并通过以下方式获取上下文的新副本getActivity()。也许某些东西正在被清除(出于记忆目的)并且我没有重新加载它?我没有收到任何类型的 NullPointerException,所以这对我来说似乎不太可能......


这个异常实际上是因为你双重关闭数据库而引发的,而不是因为你没有关闭它。

so..

in you close()方法,替换代码中的以下行:

if (db != null) {

with:

if (db != null && db.isOpen()) {
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IllegalStateException:数据库已关闭(使用 ViewPager) 的相关文章

  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class
  • 如何防止用户控件表单在 C# 中处理键盘输入(箭头键)

    我的用户控件包含其他可以选择的控件 我想实现使用箭头键导航子控件的方法 问题是家长控制拦截箭头键并使用它来滚动其视图什么是我想避免的事情 我想自己解决控制内容的导航问题 我如何控制由箭头键引起的标准行为 提前致谢 MTH 这通常是通过重写
  • CFdump cfcomponent cfscript

    可以在 cfcomponent 中使用 cfdump 吗 可以在 cfscript 中使用 cfdump 吗 我知道 anser 不是 那么如何发出 insde cfcomponent 函数的值 cf脚本 我用的是CF8 可以在 cfcom
  • 如何在执行新操作时取消先前操作的执行?

    我有一个动作创建器 它会进行昂贵的计算 并在每次用户输入内容时调度一个动作 基本上是实时更新 但是 如果用户输入多个内容 我不希望之前昂贵的计算完全运行 理想情况下 我希望能够取消执行先前的计算并只执行当前的计算 没有内置功能可以取消Pro
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra
  • PHPUnit 和 Zend Framework assertRedirectTo() 问题

    我在创建的测试中遇到了 assertRedirectTo 问题 下面是我使用的代码 public function testLoggedInIndexAction this gt dispatch this gt assertControl
  • 如何使用asm.js进行测试和开发?

    最近我读到asm js规范 看起来很酷 但是是否有任何环境 工具来开发和测试这个工具 这还只是处于规范阶段吗 您可以尝试使用 emscripten 和 ASM JS 1 并从侧分支在 firefox 构建中运行它 有关 asm js 的链接
  • 从超立方体图像中获取文本的确切位置

    使用 tesseract 中的 GetHOCRText 0 方法 我能够检索 html 中的文本 并在 webview 中呈现 html 时 我能够获取文本 但图像中文本的位置与输出不同 任何想法都非常有帮助 tesseract gt Se
  • Vue.js[vuex] 如何从突变中调度?

    我有一个要应用于 json 对象的过滤器列表 我的突变看起来像这样 const mutations setStars state payload state stars payload this dispatch filter setRev
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个
  • 循环内的异步性

    我正在使用 jQuery getJSON 用于从一组实用程序的给定 URL 检索数据的 API 我真的很想找到一种为每个实用程序重用代码 完全相同 的方法 由于循环的执行与 ajax 调用无关 因此我无法找到保留循环值的方法 我知道这个描述
  • neo4j - python 驱动程序,服务不可用

    我对 neo4j 非常陌生 我正在尝试建立从 python3 6 到 neo4j 的连接 我已经安装了驱动程序 并且刚刚开始执行第一步 导入请求 导入操作系统 导入时间 导入urllib 从 neo4j v1 导入 GraphDatabas
  • NotImplementedError:无法将符号张量 (lstm_2/strided_slice:0) 转换为 numpy 数组。时间

    张量流版本 2 3 1 numpy 版本 1 20 在代码下面 define model model Sequential model add LSTM 50 activation relu input shape n steps n fe
  • Erlang dict的时间复杂度

    我想知道 Erlang OTP 是否dict模块是作为哈希表实现的 在这种情况下它是否能提供这样的性能 平均情况 Search O 1 n k Insert O 1 Delete O 1 n k 最坏的情况下 Search O n Inse
  • 升级到 Rails 6 时是否有一种编程方法可以检测 Zeitwerk::NameError?

    我目前正在将旧的 Rails 应用程序迁移到 Rails 6 好像项目中有些文件和里面定义的类不一致 运行应用程序测试时我没有看到此错误 但部署后我收到如下错误 Zeitwerk NameError expected file app my
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50
  • 在 Nexus 7 2013 上更改方向时 CSS 媒体查询不起作用

    我目前正在我的笔记本电脑 台式电脑和 Nexus 7 2013 上测试 CSS 媒体查询 除了 Nexus 7 之外 它们在台式机和笔记本电脑上都运行良好 当我更改方向时 除非刷新页面 否则样式不会应用 例如 以纵向模式握住设备时 页面正常
  • 强制 Listview 不重复使用视图(复选框)

    我做了一个定制Listview 没有覆盖getView 方法 Listview 中的每个项目都具有以下布局 联系布局 xml

随机推荐

  • 如何从 vbscript 中的 html 页面中提取值 - 我尝试了 MSXML2.DOMDocument

    下面是我尝试从网页中的节点获取值的一些代码 但在尝试设置 objNode 时失败 非常感谢任何帮助 Dim objHttp sWebPage objNode objDoc Set objDoc CreateObject MSXML2 DOM
  • 连锁承诺并保留“这个”

    我有一个点击处理程序 需要一个接一个地进行多个异步调用 我选择使用承诺来构建这些调用 RSVP https github com tildeio rsvp js 准确地说 下面 您可以看到clickA处理程序 在控制器内部 这是一个 Emb
  • 错误:该元素具有 type 属性以及匿名子类型

    具有 type 属性的嵌套复杂 XSD 元素 只是想弄清楚为什么 XSD 中的复杂元素不能有类型属性和嵌套的复杂元素 毕竟类型只是用户定义的数据类型 因此应该能够包含任何内容 包括其他用户定义的数据类型 XSD 解析器抛出错误 该元素具有
  • ggplot2:标签表达式中的字体样式

    更改字体和大小效果很好 无需在标签中表达 这是我在更改标签表达式中的字体时遇到问题的代码 p lt ggplot data mtcars aes x wt y mpg geom point labs x Weight y expressio
  • androidx.work.impl.WorkManagerInitializer:java.lang.ClassNotFoundException:路径上的“androidx.work.impl.WorkManagerInitializer”:/data

    我最近将旧应用程序的后台服务迁移到工作经理 https developer android com topic libraries architecture workmanager 在最近的设备上 低至包含 SDK 22 看起来不错 运行重
  • 解封时出现属性错误:无法获取属性“位置”

    我正在为库存系统编写 Python CGI 脚本 需要通过存储pickle一个列表 称为locations 的对象 这是我正在使用的代码 try with open config autosave bin rb as dataFile lo
  • 整数分数约简算法

    这来源于最近完成的一次编程比赛 给你两个 10 5 整数的数组 范围在 1 10 7 含 内 int N 100000 int D 100000 想象有理数 X 是 N 的所有元素相乘并除以 D 的所有元素的结果 修改两个数组而不更改 X
  • Bootstrap 3 导航栏 - 无法正确折叠

    导航栏曾经正常工作 但我做了一些更改 它不再工作 当我将窗口缩小时 会显示切换方块 但是当我单击它时 什么也没有发生 Note 导航栏在全屏下工作正常 它只是在小窗口中 当我单击切换按钮时 下拉菜单不会出现 想知道是否有人知道如何解决它 这
  • 无法在 Eclipse 上调试基于 Android 库构建的 Android 本机代码

    我已经为此苦苦挣扎了三天 但无法完成 我有一个 android 项目 它链接到 eclipse 上的 android 库 其中包含本机代码 I saw 这个问题 https stackoverflow com questions 12638
  • pandas - 获取日期时间数据框中每天的第一个和最后一个值

    我有一个月的数据框 不包括周六和周日 每 1 分钟记录一次 v1 v2 2017 04 03 09 15 00 35 7 35 4 2017 04 03 09 16 00 28 7 28 5 2017 04 03 16 29 00 81 7
  • 处理表中的溢出

    如果我有一个像这样非常非常简单的例子的表 table table layout fixed width 300px td1 width 100px td2 width 200px 在我的其中之一 td2包含一个图像 可以说 300px in
  • C++ 删除静态数据

    如果我有一个类 其中包含分配在堆上且永不更改的私有静态数据 那么我应该什么时候 如果有的话 删除它 据我了解 类本身永远不会被构造 因为类不是 C 中的第一类对象 那么没有析构函数来删除其中的静态数据 我是 C 新手 如果我对 C 的理解有
  • 如何使用logstash插件-logstash-input-http

    我正在探索 Logstash 以接收 HTTP 上的输入 我已经使用以下方式安装了 http 插件 插件安装logstash input http 安装成功 然后我尝试使用以下命令运行logstash Logstash e 输入 http
  • R:Tibble 与 ggplot2(绘制图表)

    我正在尝试遵循 R 中的教程 https rviews rstudio com 2017 09 25 survival analysis with r https rviews rstudio com 2017 09 25 survival
  • 当用户调整 QMainWindow 大小时如何分配回调?

    我既无法在 QMainWindow 上找到类似教程的调整大小事件方案 也没有在 Qt 设计窗口的下拉菜单中看到任何用于添加调整大小事件的选项 我是 Qt 新手 我想为 QMainWindow 调整大小事件编写一个槽函数 有这样的活动吗 我怎
  • 在 Excel 中设置 csv 文件格式

    Win XP Excel 2007 我知道还有很多关于 csv 格式的其他帖子 但无法找到我需要的内容 我们的一些数据被另一家公司保存在异地 他们每天早上都会向我们发送包含前几天数据的 csv 文件 问题是这些数据来自可能具有下拉列表的网络
  • 使用sync_imports()在IPython.parallel引擎上导入自定义模块

    我一直在玩 IPython parallel 我想使用我自己的一些自定义模块 但无法按照上的说明进行操作烹饪书 http ipython org ipython doc stable parallel parallel multiengin
  • Nifty Modal - 如何在没有按钮的情况下触发模式

    这个脚本 http stuff wp dreams com modal 提供了很棒的模式转换 我想使用它们而不是标准的警报消息 现在脚本的演示展示了如何通过按 a 来触发它们
  • 如何从 R 读取换行符分隔的 JSON 文件?

    我有一个换行符分隔 即每个 JSON 对象仅限于文件中的 1 行 name json1 name json2 name json3 在Python中 我可以轻松地阅读它 如下所示 我必须使用编码encoding cp850 读取我的真实数据
  • IllegalStateException:数据库已关闭(使用 ViewPager)

    我对导致此错误的原因感到困惑 因为我已确保正确关闭数据库适配器 至少我认为是 以下是 LogCat 的说法 所有这些标签的标签都是 AndroidRuntime 致命异常 主要 java lang IllegalStateException