`
lynen
  • 浏览: 128137 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

问题分析:java.lang.IllegalStateException: getDatabase called recursively

 
阅读更多

问题场景:

在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;
}

 

分享到:
评论

相关推荐

    Java异常之—-Caused by: java.lang.IllegalStateException: Method has too many Body parameters

    异常: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解决办法

    纠结了半天的 java.lang.IllegalStateException: getOutputStream() has already。这个问题困扰了半天,在网上查阅了大量资料 出这个错误一般就是下面2个.....

    ListView后台更新报错:java.lang.IllegalStateException

    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...

    Android异常 java.lang.IllegalStateException解决方法

    1. java.lang.IllegalStateException: No wrapped connection. 2.java.lang.IllegalStateException: Adapter is detached. 原因: 1.单线程一次执行一个请求可以正常执行,如果使用多线程,同时执行多个请求时就会...

    The full error is: java.lang.IllegalState

    标题中的"The full error is: java.lang.IllegalStateException"是一个典型的Java编程错误,通常表示在不合法或不适当的状态下调用了某个方法。这个错误通常暗示程序试图执行一个不能在这个特定时刻执行的操作。让...

    java.lang.IllegalStateException: OutputStream already obtain

    标题 "java.lang.IllegalStateException: OutputStream already obtain" 涉及到的是Java编程中的一个常见错误,特别是当处理I/O流时。这个异常通常在尝试获取已经存在的OutputStream实例时抛出,表明该输出流已经被...

    关于IllegalStateException: The specified child already has a parent.

    IllegalStateException: The specified child already has a parent.我的博客中有文章讲解

    weblogic12c部署webservice错误问题WSSERVLET11

    错误信息"无法解析运行时描述符: java.lang.IllegalStateException: MASM0001:"指出在部署Web服务时遇到了异常情况。这个错误代码MASM0001通常与WebLogic的模块组装(Module Assembly)过程有关,该过程是将应用组件...

    asm5.0.jar

    Cause: java.lang.IllegalStateException: Cannot enable lazy loading because CGLIB is not available. Add CGLIB to your classpath.:java.lang.IncompatibleClassChangeError: class ...

    Failed to convert value of type ‘java.lang.String’ to required type ‘java.util.Date’; nested except

    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

    powerbuilder

    这是一个非常实用的功能,尤其是在需要批量处理或分析来自 Excel 表格的数据时。 #### 标签解析: 标签 "excel" 和 "datawindow" 明确指出了本文档涉及的主要技术领域:Excel 数据操作与 PowerBuilder 的 ...

    nexus-3.70.1-02-java17-unix.tar.gz

    java.lang.IllegalStateException: The maximum Java version for OrientDb is Java 11. Please check current Java version meets this requirement. 参见: ...

    spring入门好教程

    《Spring框架:开启Java开发新纪元》 Spring框架,由Rod Johnson创立并由Interface21公司推广,自诞生以来,它就致力于简化Java企业级应用(J2EE)的开发,提供了一种非侵入式的解决方案,极大地提高了开发效率。它...

    java 实现websocket的两种方式实例详解

    在Java中,有两种常见的方式实现WebSocket:使用Tomcat内置的WebSocket API和使用Spring框架的WebSocket支持。下面我们将详细介绍这两种方法。 **一、Tomcat的WebSocket实现** Tomcat从7.x版本开始支持WebSocket,...

    spark 核心架包

    解决java.lang.IllegalStateException: unread block data的架包

    Jnative1.4_java调用动态库所需jar

    Java是一种高级编程语言,通常用于开发跨平台的应用程序。然而,有时我们可能需要在Java程序中调用操作系统底层的动态链接库(DLLs on Windows,SOs on Linux,dylibs on macOS),以便利用C、C++等语言编写的高性能...

    借助Ehcache缓存框架实现对页面的缓存Demo

    java.lang.IllegalStateException at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader....

    xfire访问webservice客户端用到的jar包

    在Java开发中,Web服务(Web Service)是一种标准的接口,允许不同系统之间进行通信,而XFire是早年流行的一款用于构建和消费Web服务的开源框架。它使用SOAP(简单对象访问协议)和XML(可扩展标记语言)作为基础,...

Global site tag (gtag.js) - Google Analytics