The file system on the device is in a bad state. WorkManager cannot access the app's internal data store
Asked Answered
M

2

14

When I added work manager library to android studio and run the app it crashes with this error:

E/SQLiteLog: (14) cannot open file at line 37816 of [c255889bd9]
    (14) os_unix.c:37816: (13) lstat(/data/user/0/com.example/no_backup/androidx.work.workdb) - 
    (1) Process m.example : Pid (13632) Uid (11395) Euid (11395) Gid (11395) Egid (11395)
    (1) osStat failed "/data/user/0/com.example/no_backup/androidx.work.workdb" due to error (13)
    (1) osStat failed "/data/user/0/com.first.academy/no_backup" due to error (13)
    (1) Stat of /data/user/0/com.example : st_mode(40700) st_uid(11385) st_gid(11385) st_ino(164253)
    (1) Stat of /data/user/0 : st_mode(40771) st_uid(1000) st_gid(1000) st_ino(131074)
    (1) Stat of /data/user : st_mode(40711) st_uid(1000) st_gid(1000) st_ino(655366)
    (1) Stat of /data : st_mode(40771) st_uid(1000) st_gid(1000) st_ino(2)
    .....


E/SQLiteDatabase: Failed to open database '/data/user/0/com.example/no_backup/androidx.work.workdb'.
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 1806 SQLITE_CANTOPEN_EACCES[1806]): Could not open database
...

E/WM-ForceStopRunnable: The file system on the device is in a bad state. WorkManager cannot access the app's internal data store.
    android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 1806 SQLITE_CANTOPEN_EACCES[1806]): Could not open database
...

E/AndroidRuntime: FATAL EXCEPTION: pool-3-thread-1
    Process: com.example, PID: 13632
    java.lang.IllegalStateException: The file system on the device is in a bad state. WorkManager cannot access the app's internal data store.
        at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:115)
        at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 1806 SQLITE_CANTOPEN_EACCES[1806]): Could not open database
....

This is the library i added:

implementation "androidx.work:work-runtime-ktx:2.4.0"

When I remove this library it works again. I don't know if the problem with the device or the app.

Mclin answered 16/8, 2020 at 6:56 Comment(3)
Did you check this? #61910897Antiworld
@CarsonHolzheimer I created a new project to test this, i didn't add any code to the project.Mclin
Getting same crash in only one device. App is not getting open. @Mclin Have you got any solution?Trod
J
0

I managed to fix this issue by adding this to AndroidManifest.xml:

 <provider
    android:name="androidx.startup.InitializationProvider"
    android:authorities="${applicationId}.androidx-startup"
    android:exported="false"
    tools:node="merge">
    <!-- If you are using androidx.startup to initialize other components -->
    <meta-data
        android:name="androidx.work.WorkManagerInitializer"
        android:value="androidx.startup"
        tools:node="remove" />
 </provider>

I got this from the documentation here: https://developer.android.com/topic/libraries/architecture/workmanager/advanced/custom-configuration

Jessee answered 24/2, 2022 at 20:16 Comment(2)
It seems this solution is not enough to fix it. This is done on the AndroidManifest in my project, but we have the same issue here.Strohben
Please update to androidx work to 2.8.1 developer.android.com/jetpack/androidx/releases/work#2.8.1Aemia
W
0

Just change Workmanager initilization in Application class by following code

val configuration: androidx.work.Configuration = androidx.work.Configuration.Builder().build()
        configuration.initializationExceptionHandler.let {
            this.deleteDatabase(WorkManagerImpl::class.java.simpleName)
            this.getSharedPreferences(WorkManagerImpl::class.java.simpleName, Context.MODE_PRIVATE)
                ?.edit()?.clear()?.apply()
            this.let { WorkManager.initialize(it, androidx.work.Configuration.Builder().build()) }
        }
Wichern answered 10/11, 2023 at 9:30 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.