如何通过Work Manager的setData方法在Work Manager中传递可序列化对象?有没有方法通过传递对象来处理WorkManager?
WorkManager是一个库,用于将保证在满足其约束后执行的工作排队。WorkManager允许观察工作状态和创建复杂工作链的能力。
Map<String, Object> map = new HashMap<>();
AddressBookData addressBookData = new AddressBookData();
addressBookData.setThreadId(001);
map.put("AddressBookData", addressBookData);
Data data = new Data.Builder()
.putAll(map)
.build();
OneTimeWorkRequest compressionWork =
new OneTimeWorkRequest.Builder(DataSyncWorker.class)
.setInputData(data)
.build();
它使应用程序崩溃并显示错误(如addressbookdata)不是有效的类。
注意:我想在work manager中传递pojo类,并在dowork方法中从workmanager获取inputdata。
最佳答案
不能直接为WorkManager提供POJO。参见Data.Builder#putAll
方法的documentation:
有效类型包括:布尔型、整型、长型、双精度、字符串和数组
每种类型的版本。
如果可能,您可以序列化您的pojo。例如,如果它真的很小很简单,那么可以使用json将其编码为字符串,然后在worker中对其进行解码。
但是,对于更复杂的类,我个人将它们存储在数据库(sqlite,room)中,然后只传递给定对象的主键。然后,工作进程从数据库中获取对象。然而,根据我的经验,这通常是可以避免的。