文档章节

java.lang.IllegalStateException: attempt to ~~~

今日竹石
 今日竹石
发布于 2014/04/29 13:57
字数 549
阅读 214
收藏 0
点赞 0
评论 0

具体bug如下:
java.lang.IllegalStateException: attempt to re-open an already-closed object: android.database.sqlite.SQLiteQuery (mSql = SELECT PackageName, Version, CtrlStatus FROM cooee_hide_packs) 
	at android.os.Parcel.readException(Parcel.java:1330)
	at android.os.Parcel.readException(Parcel.java:1276)
	at android.app.ActivityManagerProxy.startActivity(ActivityManagerNative.java:1351)
	at android.app.Instrumentation.execStartActivity(Instrumentation.java:1374)
	at android.app.Activity.startActivityForResult(Activity.java:2827)
	at android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:817)
	at android.app.Activity.startActivity(Activity.java:2933)
	at cn.app.activity.news.BaseActivity.onClick(Xs8_News_BaseActivity.java:257)
	at android.view.View.performClick(View.java:2485)
	at android.view.View$PerformClick.run(View.java:9080)
	at android.os.Handler.handleCallback(Handler.java:587)
	at android.os.Handler.dispatchMessage(Handler.java:92)
	at android.os.Looper.loop(Looper.java:130)
	at android.app.ActivityThread.main(ActivityThread.java:3714)
	at java.lang.reflect.Method.invokeNative(Native Method)
	at java.lang.reflect.Method.invoke(Method.java:507)
	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:853)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
	at dalvik.system.NativeStart.main(Native Method)

        这个错误出现的原因是因为我在一个数据库查询方法中调用了另一个数据库查询方法,我的数据库查询方法都是在开始的时候获取SQLiteDatabase对象,在结束的时候关闭SQLiteDabse对象,结果内部的数据库查询方法在结束的时候直接关闭了SQLiteDatabase对象,导致外面的数据库查询操作报错,在这里大家不要以为多获取了几个SQLiteDatabase对象就可以了,每个线程只能使用一个SQLiteOpenHelper,也就使得每个线程使用一个SQLiteDatabase对象(多线程操作数据库会报错);

        解决办法就是我不再关闭内部数据库查询方法的SQLiteDatbase对象或者将那个方法直接集成到外面的查询方法中,当然,要确保这个查询方法只会出现其他数据库查询方法中,要是单独用这个方法,反而会因为SQLiteDatabase对象没有关闭而报错;

 

产生原因:

      假如你有A、B两个异步线程操作sqlite数据库。A是读取,B是写入,当A完成读的时候调用close(),而B在这时正在执行写的方法就会出现下面的异常。有人说去掉单例模式可以解决这个问题,但你不能忘记你在怎么单例使用的数据库还是同一个,避免不了。

解决办法:

     如果你在一定的时间内需要重复的操作数据库,那么不要调用close()方法,关闭游标就可以了。在你Activity注销或者真正不再需要的时候调用数据库的colse()方法.


© 著作权归作者所有

共有 人打赏支持
今日竹石
粉丝 41
博文 227
码字总数 181312
作品 0
朝阳
程序员
springboot整合dubbo启动报错

13-Dec-2017 13:46:28.796 信息 [RMI TCP Connection(127.0.0.1:2181)] org.apache.catalina.loader.WebappClassLoaderBase.checkStateForResourceLoading Illegal access: this web applic......

冰峰雪座
2017/12/13
108
3
大家好,最近学tomcat,jsp,servlet的时候老碰到这样的错误,求经验丰富的人帮忙解答阿,thanks so much!

Illegal access: this web application instance has been stopped already. Could not load com.mysql.jdbc.Util. The eventual following stack trace is caused by an error thrown for d......

无名人士
2011/09/27
290
1
android 操作本地数据库报错

writeSqlitedb = myOpenHelper.getWritableDatabase(); //实例化数据库 writeSqlitedb.delete 程序运行到标红的位置就报下面的错误,百度了下,好像因为使用了多线程后,就容易出现这样的错误...

天王盖地虎626
2015/04/14
99
1
上线报错,凌晨1点到7点,还未解决,求高人指点,在线等!!!

奶奶的,测试环境都运行正常,都是linux系统,部署到生产直接报下面做,百度了下有类似错,但只是类似和我一样错的一晚上都没找到,试了半天还是不行,请高人指点!!! 架构:spring+hibern...

达不溜H
2014/12/11
5.6K
18
帮忙看下这个日志。谢谢了

@Jfinal [WARN]2015-04-21 17:53:34-[Thread: com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread-#1]-[com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run()]:★ ......

chi_9
2015/04/22
1K
3
Error creating bean with name 'jobController'

@mrbird 你好,想跟你请教个问题:mysql的版本,但是运行时报错,貌似注入不成功,能帮忙解决一下吗?不胜感激! 15:16:28.178 sms [localhost-startStop-1] INFO cc.mrbird.common.xss.Xss...

april872
06/22
0
0
1.1.1版本启动时报错

我用的是1.1.1版本elastic-job-core和elastic-job-spring,放在tomcat项目中,启动的时候报错: 信息: Illegal access: this web application instance has been stopped already. Could not......

温暖的夏天
2017/07/12
70
2
1.1.1版本elastic-job启动错误

我用的是1.1.1版本elastic-job-core和elastic-job-spring,放在tomcat项目中,启动的时候报错: 信息: Illegal access: this web application instance has been stopped already. Could not......

温暖的夏天
2017/07/13
74
1
项目在本地tomcat 部署运行没有问题,可是给运维人员部署到正式环境上去,就报错,这是为什么啊

Dec 24, 2014 10:23:43 AM org.apache.catalina.loader.WebappClassLoader loadClass INFO: Illegal access: this web application instance has been stopped already. Could not load com.......

小马奔腾123
2014/12/24
530
0
JFinal2.2引入redis插件报错

@JFinal 你好,想跟你请教个问题: 1、jfinal引入redis时还需要单独引入其他jar包吗?比如:jedis,commons-pool2 2、尝试引入以上两个jar包后依然报错,麻烦您帮忙看一下, 引入方式, Redi...

sinkmesh
2017/01/03
295
2

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Win10专业版安装GIT后使用Git Bash闪退解决办法

百度后把过程和最终解决办法记录下来: 百度首先出来的解决办法如下: 来自:https://segmentfault.com/q/1010000012722511?sort=created 重启电脑 重新安装 安装到C盘 尝试网上的教程 \Git...

特拉仔
15分钟前
0
0
设计模式

1.装饰器模式 概念 允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰者可以在所委托被装饰者的行为之前或之后加上自己的行为,以达到特定的目的。 实现 增加一个修饰类包裹原来的...

EasyProgramming
30分钟前
1
0
用python2和opencv进行人脸识别

一、安装cv2 sudo apt-get install python-opencv opencv-data 二、 Haar特征分类器 Haar特征分类器就是一个XML文件,该文件中会描述人体各个部位的Haar特征值。包括人脸、眼睛、嘴唇等等。 ...

wangxuwei
30分钟前
0
0
python模板中循环字典

{% for k,v in user.items %} {{ k}} {{ v}} {% endfor %}

南桥北木
58分钟前
0
0
Java8系列之重新认识HashMap

简介 Java为数据结构中的映射定义了一个接口java.util.Map,此接口主要有四个常用的实现类,分别是HashMap、Hashtable、LinkedHashMap和TreeMap,类继承关系如下图所示: 下面针对各个实现类...

HOT_POT
今天
0
0
获取调用方的className

/** * 获取调用方的class * @return */private static String getInvoke() { StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace(); S......

iborder
今天
0
0
深入了解一下Redis的内存模型!

一前言 Redis是目前最火爆的内存数据库之一,通过在内存中读写数据,大大提高了读写速度,可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时,会接触Redis的5种对象类型(字符...

Java填坑之路
今天
1
0
从实践出发:微服务布道师告诉你Spring Cloud与Spring Boot他如何选择

背景 随着公司业务量的飞速发展,平台面临的挑战已经远远大于业务,需求量不断增加,技术人员数量增加,面临的复杂度也大大增加。在这个背景下,平台的技术架构也完成了从传统的单体应用到微...

老道士
今天
1
0
大数据学习的各个阶段

第一阶段:Linux课程讲解Linux基础操作,讲的是在命令行下进行文件系统的操作,这是Hadoop学习的基础,后面的所有视频都是基于linux操作的。鉴于很多学员没有linux基础,特增加该内容,保证零linux...

董黎明
今天
0
0
CVE-2013-0077 堆溢出分析

找了很久才发现这个环境比较容易搭建分析... 环境: 系统---Win XP SP3 漏洞程序:QQPlayer 3.7.892.400 出错DLL:quartz.dll 6.5.2600.5512 调试工具:x32db+gflag.exe 过程: 首先gflag设置...

Explorer0
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部