代码之家  ›  专栏  ›  技术社区  ›  Cheok Yan Cheng

将WorkManager从1.0.0-Alpha02升级到1.0.0-Alpha03时出现运行时异常

  •  1
  • Cheok Yan Cheng  · 技术社区  · 7 年前

    当我升级时 WorkManager 从1.0.0-alpha02到1.0.0-alpha03。

    老建筑.格拉德

    def work_version = "1.0.0-alpha02"
    implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
    // optional - Firebase JobDispatcher support
    implementation "android.arch.work:work-firebase:$work_version"
    

    新建.gradle

    def work_version = "1.0.0-alpha03"
    implementation "android.arch.work:work-runtime:$work_version" // use -ktx for Kotlin
    // optional - Firebase JobDispatcher support
    implementation "android.arch.work:work-firebase:$work_version"
    

    我注意到我需要做以下修改

    1.0.0-字母02

    public WorkerResult doWork() {
    

    1.0.0-字母03

    public Result doWork() {
    

    不过,这不是什么大问题。但是,如果我们倾向于升级一个应用程序,它以前已经在使用 1.0.0-alpha02 ,我们将得到以下运行时异常

    android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: WorkTag.tag, WorkTag.work_spec_id (code 1555)
        at android.database.sqlite.SQLiteConnection.nativeExecuteForChangedRowCount(Native Method)
        at android.database.sqlite.SQLiteConnection.executeForChangedRowCount(SQLiteConnection.java:734)
        at android.database.sqlite.SQLiteSession.executeForChangedRowCount(SQLiteSession.java:754)
        at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
        at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1679)
        at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608)
        at android.arch.persistence.db.framework.FrameworkSQLiteDatabase.execSQL(FrameworkSQLiteDatabase.java:242)
        at androidx.work.impl.WorkDatabaseMigrations$1.migrate(WorkDatabaseMigrations.java:73)
        at android.arch.persistence.room.RoomOpenHelper.onUpgrade(RoomOpenHelper.java:85)
        at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.onUpgrade(FrameworkSQLiteOpenHelper.java:133)
        at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:256)
        at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:163)
        at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper$OpenHelper.getWritableSupportDatabase(FrameworkSQLiteOpenHelper.java:96)
        at android.arch.persistence.db.framework.FrameworkSQLiteOpenHelper.getWritableDatabase(FrameworkSQLiteOpenHelper.java:54)
        at android.arch.persistence.room.RoomDatabase.compileStatement(RoomDatabase.java:244)
        at android.arch.persistence.room.SharedSQLiteStatement.createNewStatement(SharedSQLiteStatement.java:65)
        at android.arch.persistence.room.SharedSQLiteStatement.getStmt(SharedSQLiteStatement.java:72)
        at android.arch.persistence.room.SharedSQLiteStatement.acquire(SharedSQLiteStatement.java:87)
        at androidx.work.impl.model.WorkSpecDao_Impl.resetScheduledState(WorkSpecDao_Impl.java:337)
        at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(WorkManagerImpl.java:514)
        at androidx.work.impl.utils.ForceStopRunnable.run(ForceStopRunnable.java:73)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
        at java.lang.Thread.run(Thread.java:761)
    

    我可以知道有哪些解决方法可以避免这种运行时异常吗?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Rahul    7 年前

    我们为 Worker alpha03 是的。在很少的情况下,您有一个预先存在的标签,这将发生。我们将在 alpha04 .敬请期待。

    推荐文章