问题场景:
在app首次启动使用到db的时候,后台提示如下错误信息
java.lang.IllegalStateException: getDatabase called recursively at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:204) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
问题产生的原因分析
app的db想关的操作SQLiteOpenHelper的实现类中,app在publicvoid onCreate(SQLiteDatabase db)或者是publicvoid onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)中在其他线程或者是在这些方法体有其他的db模块调用到了getWritableDatabase进行db的新增,修改,删除等操作就会导致此问题
解决方案:
如果在onCreate或者是onUpdate的过程中有调用到其他模块进行相同db操作,则需要进行类似于下面内容的处理:
private SQLiteDatabase mDefaultWritableDatabase = null; @Override public SQLiteDatabase getWritableDatabase() { final SQLiteDatabase db; if(mDefaultWritableDatabase != null){ db = mDefaultWritableDatabase; } else { db = super.getWritableDatabase(); } return db; } @Override public void onCreate(SQLiteDatabase db) { this.mDefaultWritableDatabase = db; } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { this.mDefaultWritableDatabase = db; } @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { this.mDefaultWritableDatabase = db; }
相关推荐
异常:Caused by: java.lang.IllegalStateException: Method has too many Body parameters Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract ...
java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but...
1. java.lang.IllegalStateException: No wrapped connection. 2.java.lang.IllegalStateException: Adapter is detached. 原因: 1.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会...
纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
NULL 博文链接:https://hw1287789687.iteye.com/blog/1925191
weblogic12c部署webservice错误问题WSSERVLET11: 无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:
NULL 博文链接:https://anminer.iteye.com/blog/845067
Cause: java.lang.IllegalStateException: Cannot enable lazy loading because CGLIB is not available. Add CGLIB to your classpath.:java.lang.IncompatibleClassChangeError: class ...
Type 异常报告 消息 Failed to convert ... nested exception is java.lang.IllegalStateException: Cannot convert value of type 'java.lang.String' to required type 'java.util.Date': no matching editors or co
今天公司springboot项目准备部署到...java.lang.IllegalStateException: 启动子级时出错 at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:720) at org.apache.catalina.core.Con
主要介绍了java 实现websocket的两种方式实例详解,一种使用tomcat的websocket实现,一种使用spring的websocket,本文通过代码给大家介绍的非常详细,需要的朋友可以参考下
spring 总的概述。。。入门好教程~~~~~~~~~~~~~
从excel导入数据到datawindow-转载
解决java.lang.IllegalStateException: unread block data的架包
java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader....
各种数据库在JDBC中的连接方法.及在struts与hibernate中的配置..
TongWeb常见问题处理,用于运维的问题处理,便于解决应用部署时遇到的各种问题
因工作的缘故,有机会接触了Java本地方法调用(JNI)。本文中记下了初试JNI的过程和一点点体会。 使用Java的JNI调用C/C++的动态联结库有个固定的步骤,下面将以一个最简单的HelloWorld例子程序来说明调用过程。这个...
java dubbo admin 2.5.3 + jdk 1.7 亲试 好用 ... java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext