Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 方法doWork()未使用WorkManager调用_Android_Androidx_Android Workmanager - Fatal编程技术网

Android 方法doWork()未使用WorkManager调用

Android 方法doWork()未使用WorkManager调用,android,androidx,android-workmanager,Android,Androidx,Android Workmanager,我需要将文件从设备上载到我的应用程序。我使用WorkManager在后台执行此操作 将库从android.arch.work:work runtime:1.0.0-alpha04更新到androidx.work:work runtime:2.0.0后,出现了一些问题 方法doWork()不在我的UploadFileTask(workerParams:WorkerParameters)中调用:Worker(Application.getContext(),workerParams) 以下是我如何运

我需要将文件从设备上载到我的应用程序。我使用WorkManager在后台执行此操作

将库从
android.arch.work:work runtime:1.0.0-alpha04
更新到
androidx.work:work runtime:2.0.0
后,出现了一些问题

方法
doWork()
不在我的
UploadFileTask(workerParams:WorkerParameters)中调用:Worker(Application.getContext(),workerParams)

以下是我如何运行我的上传:

fun upload(id: String, file: File, params: FileStorage.DocParams?, additionalTag: String): File {
    cancelUploadIfWas(file)
    fileStorage.save(file, params)
    val inputData = Data.Builder().putString(FileTask.PATH_KEY, file.path).build()
    val uploadWork = OneTimeWorkRequest.Builder(UploadFileTask::class.java)
        .addTag(ID_PREFIX + id)
        .addTag(PATH_PREFIX + file.path)
        .addTag(UPLOAD_TAG)
        .addTag(additionalTag)
        .keepResultsForAtLeast(0, TimeUnit.SECONDS)
        .setInputData(inputData)
        .build()

    workManager.enqueue(uploadWork)
    file.uploadStatus.onLoading()
    file.uploadWork=uploadWork
    uploadingFiles.put(ID_PREFIX + id, file)
    workManager.getWorkInfoByIdLiveData(uploadWork.id).observe(this, uploadObserver)
    return file
}
但是我的
uploadObserver
接收
状态。在
状态之后失败。排队


我做错了什么?

解决了

诀窍在于,我们必须通过以下方式创建任务:

UploadFileTask(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams)
我们任务的构造函数必须接收两个参数:
context:context
workerParams:WorkerParameters

说明:

val downloadWork = OneTimeWorkRequest.Builder(downloadingTask)
            .addTag(ID_TAG)
            .keepResultsForAtLeast(0, TimeUnit.SECONDS)
            .build()

workManager.enqueue(downloadWork)

WorkManager
希望收到
downloadWork
,这是
downloadingTask
的结果,其构造函数中正好有两个参数

已解决

诀窍在于,我们必须通过以下方式创建任务:

UploadFileTask(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams)
我们任务的构造函数必须接收两个参数:
context:context
workerParams:WorkerParameters

说明:

val downloadWork = OneTimeWorkRequest.Builder(downloadingTask)
            .addTag(ID_TAG)
            .keepResultsForAtLeast(0, TimeUnit.SECONDS)
            .build()

workManager.enqueue(downloadWork)


WorkManager
希望收到
downloadWork
,这是与
downloadingTask
一起产生的结果,其构造函数中正好有两个参数

2.0.0版仅适用于androidx,您是否使用它而不是支持库?@ronginat是,我已经将我的所有支持库更新为AndroidXPerhaps您的
UploadFileTask
实现中存在问题。是否有特殊原因设置四个不同的标记来标识您的工作请求?然后,您将设置一个最小持续时间,以保持结果大约等于0。这似乎很危险,因为在查询其状态之前可能会对其进行删减。将其设置为0的原因是什么?Thx告诉大家,解决了问题2.0.0版仅适用于androidx,您是否使用它而不是支持库?@ronginat是的,我已经将我的所有支持库更新为AndroidXPerhaps您的
UploadFileTask
实现中存在问题。是否有特殊原因设置四个不同的标记来标识您的工作请求?然后,您将设置一个最小持续时间,以保持结果大约等于0。这似乎很危险,因为在查询其状态之前可能会对其进行删减。设置为0的原因是什么?Thx对所有人来说,解决了问题你能具体点吗?你到底做了什么改变?我也有这个双参数构造函数,但既没有调用构造函数,也没有调用dowork()!!!你能告诉我吗@adi首先我这样做:
UploadFileTask(workerParams:WorkerParameters):Worker(Application.getContext(),workerParams)
我的
UploadFileTask
构造函数中没有上下文参数。但事实上,系统在任务构造函数中同时需要两个参数:
UploadFileTask(context:context,workerParams:WorkerParameters):Worker(context,workerParams)
@adi我在我的回答中添加了一个解释谢谢你的输入。我已经发布了一个关于这个的问题。如果可能的话,请看一看:你能具体点吗?你到底做了什么改变?我也有这个双参数构造函数,但既没有调用构造函数,也没有调用dowork()!!!你能告诉我吗@adi首先我这样做:
UploadFileTask(workerParams:WorkerParameters):Worker(Application.getContext(),workerParams)
我的
UploadFileTask
构造函数中没有上下文参数。但事实上,系统在任务构造函数中同时需要两个参数:
UploadFileTask(context:context,workerParams:WorkerParameters):Worker(context,workerParams)
@adi我在我的回答中添加了一个解释谢谢你的输入。我已经发布了一个关于这个的问题。如果可能,请看一下: