Как отправить byteArray в класс Worker при реализации WorkManger? - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь отправить byteArray в качестве входных данных в мой рабочий класс внутри WorkRequest. Есть ли способ отправить byteArray и получить его внутри рабочего класса?

Я попытался отправить IntArray и смог достичь результата.

Реализация:

//work request
 val workRequest = OneTimeWorkRequest.Builder(MyWroker::class.java)
                  .setInputData(createInputData())
                  .build()
//create Input Data for work request
fun createInputData(): Data {
        return Data.Builder()
                .putString(FIRST_KEY, "My value")
                .putInt(SECOND_KEY, 5)
                .putByteArray(getByteArray())
                .build()
    }

I am getting an error cannot resolve method getByteArray(). I have read the documentation of Data class and there is no such method available.

1 Ответ

0 голосов
/ 20 мая 2019

Добавлена ​​поддержка для хранения и извлечения байтов и байтовых массивов в Data объект * WorkManager v2.1.0-alpha01 .

Вы можете добавить KTX WorkManager и использовать OneTimeWorkRequestBuilder<>() и workDataOf() в вашем рабочем запросе (или используйте метод putByteArray() объекта Data.Builder):

val workRequest = OneTimeWorkRequestBuilder<MyWorker>()
    .setInputData(createInputData())
    .build()

private fun createInputData() = workDataOf(
    FIRST_KEY to "My value", 
    SECOND_KEY to byteArrayOf(0x2E, 0x38))

и затем получитеБайт массив в вашем работнике, используя что-то вроде:

class MyWorker(ctx: Context, params: WorkerParameters) : Worker(ctx, params) {

    override fun doWork(): Result {
        val myByteArray = inputData.getByteArray()

        // Do something with the ByteArray

        Result.success()
    }
}
...