如何通过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)中,然后只传递给定对象的主键。然后,工作进程从数据库中获取对象。然而,根据我的经验,这通常是可以避免的。

07-28 03:49
查看更多