Метод doWork () не вызывается с WorkManager - PullRequest
0 голосов
/ 30 марта 2019

Мне нужно загрузить файл с устройства в мое приложение.Я использую 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 получает State.FAILED ровно после State.ENQUEUED

Что я делаю не так?

1 Ответ

0 голосов
/ 01 апреля 2019

решаемые

Хитрость была в том, что мы должны создать задачу следующим образом:

UploadFileTask(context: Context, workerParams: WorkerParameters) : Worker(context, workerParams)

Конструктор нашей задачи должен получить ровно два параметра: context: Context и workerParams: WorkerParameters

...