Невозможно возобновить активность с android.database.sqlite.SQLiteException: не ошибка (код 0).Как мне это исправить? - PullRequest
0 голосов
/ 12 марта 2019

У меня следующая проблема, которая возникает на устройствах с Android версии 5 и 6, но другие версии Android не сообщают о такой проблеме.Проблема указывает на эту строку:

private var db: SQLiteDatabase = this.writableDatabase

Однако в последнее время она работала хорошо для всех версий и не было никаких проблем.Теперь он просто выбрасывает SQLiteException: not an error (code 0).Я пытался найти эту проблему в Google, но подходящего ответа для моего случая не было.Тем не менее, я попытался применить найденные ответы, такие как добавление разрешений READ и WRITE в AndroidManifest.xml.Может ли кто-нибудь помочь мне исправить это?

Я действительно не могу понять, почему он перестал работать для Android 5 и 6 ...

Большое спасибо заранее.

ВотСтек стека:

03-12 23:56:41.542 13600-13600/com.easyapps.cryptnote E/CrashlyticsCore: Failed to execute task.
    java.util.concurrent.TimeoutException
        at java.util.concurrent.FutureTask.get(FutureTask.java:176)
        at com.crashlytics.android.core.CrashlyticsBackgroundWorker.submitAndWait(CrashlyticsBackgroundWorker.java:41)
        at com.crashlytics.android.core.CrashlyticsController.handleUncaughtException(CrashlyticsController.java:321)
        at com.crashlytics.android.core.CrashlyticsController$6.onUncaughtException(CrashlyticsController.java:301)
        at com.crashlytics.android.core.CrashlyticsUncaughtExceptionHandler.uncaughtException(CrashlyticsUncaughtExceptionHandler.java:42)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
        at java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
03-12 23:56:41.543 13600-13600/com.easyapps.cryptnote E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.easyapps.cryptnote, PID: 13600
    java.lang.RuntimeException: Unable to resume activity {com.easyapps.cryptnote/com.easyapps.cryptnote.MainActivity}: android.database.sqlite.SQLiteException: not an error (code 0)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3028)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3063)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418)
        at android.app.ActivityThread.access$800(ActivityThread.java:155)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5343)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700)
     Caused by: android.database.sqlite.SQLiteException: not an error (code 0)
        at android.database.sqlite.SQLiteConnection.nativeRegisterLocalizedCollators(Native Method)
        at android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration(SQLiteConnection.java:361)
        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:806)
        at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:791)
        at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
        at android.app.ContextImpl.openOrCreateDatabase(ContextImpl.java:1287)
        at android.content.ContextWrapper.openOrCreateDatabase(ContextWrapper.java:268)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:223)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
        at com.easyapps.cryptnote.ListDatabase.<init>(ListDatabase.kt:26)
        at com.easyapps.cryptnote.MainActivity.updateNotes(MainActivity.kt:584)
        at com.easyapps.cryptnote.MainActivity.onResume(MainActivity.kt:123)
        at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1280)
        at android.app.Activity.performResume(Activity.java:6096)
        at android.app.ActivityThread.performResumeActivity(ActivityThread.java:3011)
        at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:3063) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2418) 
        at android.app.ActivityThread.access$800(ActivityThread.java:155) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1317) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:135) 
        at android.app.ActivityThread.main(ActivityThread.java:5343) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:372) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:905) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:700) 

1 Ответ

1 голос
/ 13 марта 2019

Я нашел проблему.Благодаря Eugen Pechanec (ответ выше) я смог обнаружить проблему в настройках Locale.Мое приложение включает в себя русский, английский и немецкий языки, и если язык устройства русский, то Locale.getDefault().language предоставляет в Lollipop и Marshmallow (может быть и в других версиях) значение "русский", которое нельзя использовать для класса Locale() ив результате private var db: SQLiteDatabase = this.writableDatabase разбился.Чтобы избежать этого значения, я реализовал следующую функцию в своем классе LangageSettings:

private fun getLang(): String? {
    return if (Locale.getDefault().language == "русский")
        "ru"
    else
        Locale.getDefault().language
}

Вот и все!Это помогло избежать нерешенной ценности.Также, здесь можно найти аналогичный случай, хотя это не помогло мне решить мою проблему.

Надеюсь, это поможет тем, у кого такая же проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...