Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 当我的应用程序作为“停止”时,重新打开SQLiteOpenHelper;关闭();从未在数据库上显式调用;_Android_Sqlite_Android Sqlite - Fatal编程技术网

Android 当我的应用程序作为“停止”时,重新打开SQLiteOpenHelper;关闭();从未在数据库上显式调用;

Android 当我的应用程序作为“停止”时,重新打开SQLiteOpenHelper;关闭();从未在数据库上显式调用;,android,sqlite,android-sqlite,Android,Sqlite,Android Sqlite,我正在使用SQLiteOpenHelper。当我的应用程序正常关闭时,数据库也会在方法ondestory()中正常关闭。强制关闭时,数据库保持打开状态,稍后,当我的应用程序尝试使用getReadableDatabase()读取数据库时,它崩溃并显示以下消息: 09-26 13:45:30.995:错误/数据库(12632):从未对数据库显式调用close() 以下是完整的日志: 09-27 03:10:04.331: ERROR/Database(391): close() was never

我正在使用
SQLiteOpenHelper
。当我的应用程序正常关闭时,数据库也会在方法
ondestory()
中正常关闭。强制关闭时,数据库保持打开状态,稍后,当我的应用程序尝试使用
getReadableDatabase()
读取数据库时,它崩溃并显示以下消息:

09-26 13:45:30.995:错误/数据库(12632):从未对数据库显式调用close()

以下是完整的日志:

09-27 03:10:04.331: ERROR/Database(391): close() was never explicitly called on database '/data/data/myApplication/databases/DownloadDatabase1' 
09-27 03:10:04.331: ERROR/Database(391): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.<init>(SQLiteDatabase.java:1847)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
09-27 03:10:04.331: ERROR/Database(391):     at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544)
09-27 03:10:04.331: ERROR/Database(391):     at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
09-27 03:10:04.331: ERROR/Database(391):     at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
09-27 03:10:04.331:错误/数据库(391):从未对数据库“/data/data/myApplication/databases/DownloadDatabase1”显式调用close()
09-27 03:10:04.331:错误/数据库(391):android.Database.sqlite.DatabaseObjectNotClosedException:应用程序未关闭在此打开的光标或数据库对象
09-27 03:10:04.331:错误/数据库(391):位于android.Database.sqlite.SQLiteDatabase.(SQLiteDatabase.java:1847)
09-27 03:10:04.331:错误/数据库(391):位于android.Database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:820)
09-27 03:10:04.331:错误/数据库(391):位于android.Database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:854)
09-27 03:10:04.331:错误/数据库(391):位于android.Database.sqlite.SQLiteDatabase.openOrCreateDatabase(SQLiteDatabase.java:847)
09-27 03:10:04.331:错误/数据库(391):位于android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:544)
09-27 03:10:04.331:错误/数据库(391):位于android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:203)
09-27 03:10:04.331:错误/数据库(391):位于android.Database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:118)
09-27 03:10:04.331:错误/数据库(391):位于android.Database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187)
我跟踪了堆栈跟踪,我猜异常是因为以下代码行:

setLocale(Locale.getDefault())


上面的代码来自该文件。关于如何解决这个问题有什么建议吗?

我建议您在处理完数据库后立即关闭它。每次需要执行事务时打开和关闭数据库也不是一个坏主意。除非您的应用程序不断写入数据,否则您不应该失去性能

,即使它出现错误,您应该能够访问数据库。查看底层代码,我的理解是,此类错误不应导致程序退出:

检查那里的
finalize()
方法。您将看到,它只是尝试清理,它不会抛出异常


您一定在其他地方遇到了问题。

请发布整个日志。但是,这并不能完全解决问题,因为在使用数据库时,应用程序可能会被强制关闭。我想他们一定是在做其他事情。在关闭数据库之前,我已多次使用我的应用程序FC。它不应该阻止你重新打开它。我也收到了错误消息,但它不会导致崩溃。确保扫描整个logcat以查找exceptionmy应用程序从web服务器下载了多个文件,并且我正在使用sqlite保存我的下载状态和进度。所以每次下载我都有很多更新查询,我认为为每个查询打开和关闭数据库是没有效率的。不过我尝试过这个想法,但我不知道关闭数据库后如何打开它。我使用的是sqliteOpenHelper,当我调用getReadableDatabase或GetWritableDatabase时,它会隐式打开数据库。但是,当我显式关闭它时,调用GetReadbleDatabase将导致数据库之前关闭的异常。谢谢你的回答!对由于堆栈跟踪,我认为SQLiteDatabase的构造函数中发生了异常。