标签:android android-jetpack android-workmanager
我们如何通过工作管理器的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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。