首页 > 解决方案 > 实现 WorkManger 时如何向 Worker 类发送 byteArray?

问题描述

我正在尝试将一个 byteArray 作为输入数据发送到 WorkRequest 中的我的 Worker 类。有没有办法在工人类中发送 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.

标签: androidarraysandroid-architecture-componentsandroid-jetpackandroid-workmanager

解决方案


WorkManager v2.1.0-alpha01添加了将字节和字节数组存储和检索到Data对象的支持。

您可以添加 WorkManager 的 KTX 并在您的工作请求中使用和(或使用对象的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()
    }
}

推荐阅读