如何在android中的工作管理器中传递POJO类?
作者:互联网
我们如何通过工作管理器的setData方法在工作管理器中传递Serializable对象?有没有办法通过传递对象来处理工作管理器?
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不是有效的类.
注意:我想在工作管理器中传递POJO类,并在doWork方法中从工作管理器获取InputData.
解决方法:
您不能直接为WorkManager提供POJO.请参阅Data.Builder#putAll方法的documentation:
Valid types are: Boolean, Integer, Long, Double, String, and array
versions of each of those types.
如果可能,您可以序列化您的POJO.例如,如果它真的很小而且简单,您可以使用JSON将其编码为字符串,然后在Worker中对其进行解码.
但是,对于更复杂的类,我个人将它们存储在数据库(SQLite,Room)中,然后只传递给定对象的主键.然后,Worker从数据库中提取对象.但是,根据我的经验,通常可以避免.
标签:android,android-jetpack,android-workmanager 来源: https://codeday.me/bug/20190910/1801419.html