如何在不进行序列化的情况下将对象作为输入传递给WorkManager?

时间:2019-04-27 02:48:07

标签: android-workmanager

我需要将复杂的对象传递给WorkManager。或者我需要序列化包含Livedata和Date的对象。

它抛出java.lang.IllegalArgumentException:关键CabId2具有无效的类型类com.example.sonyadmin.data.Task

     val data = workDataOf("cabinId2" to task)
     val uploadWorkRequest = OneTimeWorkRequestBuilder<WManager>()
         .setInputData(data)
         .build()

1 个答案:

答案 0 :(得分:2)

WorkManager的Data类仅接受某些特定类型作为值,如参考文档中所述:

  

一组持久的键/值对,用作ListenableWorkers的输入和输出。键是字符串,值可以是字符串,原始类型或其数组变体。

最重要的是,大小限制约为10KB,由常量MAX_DATA_BYTES指定。
如果数据不是太大,则可能需要将其序列化为String并将其用作WorkRequest中的inputData。另一种方法是仅将对象的引用放入inputData中。 WorkManager's codelab的示例中,图像的URI被传递到WorkRequest中,并且图像在文件系统上。