问题场景:
在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: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....
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.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会...
标题中的"The full error is: java.lang.IllegalStateException"是一个典型的Java编程错误,通常表示在不合法或不适当的状态下调用了某个方法。这个错误通常暗示程序试图执行一个不能在这个特定时刻执行的操作。让...
标题 "java.lang.IllegalStateException: OutputStream already obtain" 涉及到的是Java编程中的一个常见错误,特别是当处理I/O流时。这个异常通常在尝试获取已经存在的OutputStream实例时抛出,表明该输出流已经被...
IllegalStateException: The specified child already has a parent.我的博客中有文章讲解
错误信息"无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:"指出在部署Web服务时遇到了异常情况。这个错误代码MASM0001通常与WebLogic的模块组装(Module Assembly)过程有关,该过程是将应用组件...
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
这是一个非常实用的功能,尤其是在需要批量处理或分析来自 Excel 表格的数据时。 #### 标签解析: 标签 "excel" 和 "datawindow" 明确指出了本文档涉及的主要技术领域:Excel 数据操作与 PowerBuilder 的 ...
java.lang.IllegalStateException: The maximum Java version for OrientDb is Java 11. Please check current Java version meets this requirement. 参见: ...
《Spring框架:开启Java开发新纪元》 Spring框架,由Rod Johnson创立并由Interface21公司推广,自诞生以来,它就致力于简化Java企业级应用(J2EE)的开发,提供了一种非侵入式的解决方案,极大地提高了开发效率。它...
在Java中,有两种常见的方式实现WebSocket:使用Tomcat内置的WebSocket API和使用Spring框架的WebSocket支持。下面我们将详细介绍这两种方法。 **一、Tomcat的WebSocket实现** Tomcat从7.x版本开始支持WebSocket,...
解决java.lang.IllegalStateException: unread block data的架包
Java是一种高级编程语言,通常用于开发跨平台的应用程序。然而,有时我们可能需要在Java程序中调用操作系统底层的动态链接库(DLLs on Windows,SOs on Linux,dylibs on macOS),以便利用C、C++等语言编写的高性能...
java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader....
在Java开发中,Web服务(Web Service)是一种标准的接口,允许不同系统之间进行通信,而XFire是早年流行的一款用于构建和消费Web服务的开源框架。它使用SOAP(简单对象访问协议)和XML(可扩展标记语言)作为基础,...