安卓SQLiteException:无法更改区域设置分贝“EN

编程入门 行业动态 更新时间:2024-10-26 14:41:14
本文介绍了安卓SQLiteException:无法更改区域设置分贝“EN_US”的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我最近更新了我的(开源的)安卓应用程序之一,我的用户获得的是我不能复制的异常。关键的部分是:

android.database.sqlite.SQLiteDatabaseLockedException:数据库被锁定(code 5)

然后

产生的原因:android.database.sqlite.SQLiteException:无法更改区域设置DB/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db到EN_US

这是发生在了Android 2.3的设备 - 4.2.1,并且在应用程序内的多个地方,我尝试连接到数据库。我关闭数据库后,我用它。

我找不到太多的信息有关未能改变区域设置数据库异常。当我看source对于SQLiteConnection(线386)这似乎与任一android_metadata表或使用新的语言环境更新索引的问题。

Here是code是造成异常(Github上)。

java.lang.RuntimeException的:执行doInBackground时出错() 在android.support.v4.content.ModernAsyncTask $ 3.done(ModernAsyncTask.java:137) 在java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) 在java.util.concurrent.FutureTask.setException(FutureTask.java:219) 在java.util.concurrent.FutureTask.run(FutureTask.java:239) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:573) 在java.lang.Thread.run(Thread.java:856)产生的原因:android.database.sqlite.SQLiteException:无法更改区域设置DB/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db以EN_US。 在android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386) 在android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218) 在android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) 在android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) 在android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) 在android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) 在android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804​​) 在android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) 在android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) 在android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:854) 在android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:229) 在android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) 在android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 在com.airlocksoftware.database.DbInterface(DbInterface.java:28) 在com.airlocksoftware.hackernews.loader.StoryLoader.loadStories(StoryLoader.java:62) 在com.airlocksoftware.hackernews.loader.StoryLoader.loadInBackground(StoryLoader.java:54) 在com.airlocksoftware.hackernews.loader.StoryLoader.loadInBackground(StoryLoader.java:1) 在android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:240) 在android.support.v4.content.AsyncTaskLoader $ LoadTask.doInBackground(AsyncTaskLoader.java:51) 在android.support.v4.content.AsyncTaskLoader $ LoadTask.doInBackground(AsyncTaskLoader.java:40) 在android.support.v4.content.ModernAsyncTask $ 2.call(ModernAsyncTask.java:123) 在java.util.concurrent.FutureTask.run(FutureTask.java:234) ... 3多由:android.database.sqlite.SQLiteDatabaseLockedException:数据库被锁定(code 5) 在android.database.sqlite.SQLiteConnection.nativeExecute(本机方法) 在android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:548) 在android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:364) ... 24更多

解决方案

检查数据库的内容,特别是android_metadata。它与该DDL的表:

CREATE TABLE android_metadata(     区域TEXT );

应包含至少一个记录与此内容:

EN_US

这解决了我自己的问题。

有关详细信息: 打开一个源码编辑器,数据库文件,如 SQLiteStudio 然后打开 android_metadata 表(如果它不存在创建它。(你可以通过查询编辑器(工具>打开查询编辑器)及复印件创建/粘贴DDL code以上)

插入您可以复制的记录/粘贴此行的查询编辑器:

插入android_metadata值('EN_US');

提示:运行在SQLiteStudio你应该按下按钮与查询工具栏中的图标

I recently updated one of my (open-source) Android apps and my users are getting an exception that I can't replicate. The key parts are :

android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5)

and then

Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db' to 'en_US'.

This is happening on devices with Android 2.3 - 4.2.1, and in multiple places within the app where I try to connect to a database. I am closing the database after I use it.

I can't find much information about the "failed to change locale for db" exception. When I look at the source for SQLiteConnection (line 386) it seems to be a problem with either the 'android_metadata' table or 'updating the indexes using a new locale'.

Here is the code that's causing the exception (on Github).

java.lang.RuntimeException: An error occured while executing doInBackground() at android.support.v4.content.ModernAsyncTask$3.done(ModernAsyncTask.java:137) at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352) at java.util.concurrent.FutureTask.setException(FutureTask.java:219) at java.util.concurrent.FutureTask.run(FutureTask.java:239) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) at java.lang.Thread.run(Thread.java:856) Caused by: android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.airlocksoftware.hackernews/databases/hacker_news_cache.db' to 'en_US'. at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:386) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:218) at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193) at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185) at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177) at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804) at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:789) at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694) at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:854) at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:229) at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:224) at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) at com.airlocksoftware.database.DbInterface.(DbInterface.java:28) at com.airlocksoftware.hackernews.loader.StoryLoader.loadStories(StoryLoader.java:62) at com.airlocksoftware.hackernews.loader.StoryLoader.loadInBackground(StoryLoader.java:54) at com.airlocksoftware.hackernews.loader.StoryLoader.loadInBackground(StoryLoader.java:1) at android.support.v4.content.AsyncTaskLoader.onLoadInBackground(AsyncTaskLoader.java:240) at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:51) at android.support.v4.content.AsyncTaskLoader$LoadTask.doInBackground(AsyncTaskLoader.java:40) at android.support.v4.content.ModernAsyncTask$2.call(ModernAsyncTask.java:123) at java.util.concurrent.FutureTask.run(FutureTask.java:234) ... 3 more Caused by: android.database.sqlite.SQLiteDatabaseLockedException: database is locked (code 5) at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method) at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:548) at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:364) ... 24 more

解决方案

check your database content, specially 'android_metadata'. it's a table with this DDL:

CREATE TABLE android_metadata ( locale TEXT );

which should contain at least one record with this content:

en_US

this solved my own problem.

for more details: open your database file with a sqlite editor such as SQLiteStudio then open android_metadata table (if it does not exist create it. (you may create it with the query editor (tools>open query editor) and copy/paste the DDL code above)

for inserting the record you may copy/paste this line in the query editor:

insert into android_metadata values ('en_us');

hint: to run the query in SQLiteStudio you should push the button with icon in the toolbar.

更多推荐

安卓SQLiteException:无法更改区域设置分贝“EN

本文发布于:2023-11-13 01:34:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1583047.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:分贝   区域   SQLiteException   EN

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!