【发布时间】:2021-05-06 13:08:54
【问题描述】:
我尝试运行该作业,但我一直收到一个错误。代码:
class UpdaterJob @Inject constructor(
private val context: Context,
workerParams: WorkerParameters
) :
CoroutineWorker(context, workerParams) {
override suspend fun doWork(): Result = //coroutineScope {
withContext(Dispatchers.IO) {
Result.success()
// }
}
companion object {
const val TAG = "UpdateChecker"
fun setupTask(context: Context) {
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val request = PeriodicWorkRequestBuilder<UpdaterJob>(
1, TimeUnit.DAYS,
1, TimeUnit.HOURS
)
.addTag(TAG)
.setConstraints(constraints)
.build()
// WorkManager.getInstance(context).enqueue(request)
WorkManager.getInstance(context)
.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, request)
}
fun cancelTask(context: Context) {
WorkManager.getInstance(context).cancelAllWorkByTag(TAG)
}
}
}
我试图通过 Dagger2: Unable to inject dependencies in WorkManager 制作我的 DaggerWorkerFactory,但我仍然遇到同样的错误,日志:
2021-02-02 13:39:15.894 7542-7542/com.rulate.rulateapp.debug E/AndroidRuntime:致命异常:主进程: com.rulate.rulateapp.debug,PID:7542 java.lang.NoClassDefFoundError: 未能解决: Landroidx/work/impl/utils/futures/AbstractFuture; 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 引起:java.lang.ClassNotFoundException: androidx.work.impl.utils.futures.AbstractFuture 在 java.lang.VMClassLoader.findLoadedClass(本机方法) 在 java.lang.ClassLoader.findLoadedClass(ClassLoader.java:738) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:363) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 原因:java.lang.NoClassDefFoundError:解析失败: Lcom/google/common/util/concurrent/ListenableFuture; 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 引起:java.lang.ClassNotFoundException:找不到类 路径上的“com.google.common.util.concurrent.ListenableFuture”: DexPathList[[压缩文件 "/data/app/~~hUB4V6hTR0qg-4tdmVBeBg==/com.rulate.rulateapp.debug-qn72fwjfGyiwIXEoVyVyTw==/base.apk"],nativeLibraryDirectories=[/data/app/~~hUB4V6hTR0qg-4tdmVBeBg==/com.规则.rulateapp.debug-qn72fwjfGyiwIXEoVyVyTw==/lib/x86, /data/app/~~hUB4V6hTR0qg-4tdmVBeBg==/com.rulate.rulateapp.debug-qn72fwjfGyiwIXEoVyVyTw==/base.apk!/lib/x86, /system/lib, /system_ext/lib]] 在 dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:379) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:312) 在 androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:181) 在 androidx.work.WorkManager.initialize(WorkManager.java:210) 在 com.ruler.rulateapp.ui.App.configureWorkManager(App.kt:60) 在 com.ruler.rulateapp.ui.App.onCreate(App.kt:47) 在 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1192) 在 android.app.ActivityThread.handleBindApplication(ActivityThread.java:6712) 在 android.app.ActivityThread.access$1300(ActivityThread.java:237) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1913) 在 android.os.Handler.dispatchMessage(Handler.java:106) 在 android.os.Looper.loop(Looper.java:223) 在 android.app.ActivityThread.main(ActivityThread.java:7656) 在 java.lang.reflect.Method.invoke(本机方法) 在 com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
【问题讨论】: