其他分享
首页 > 其他分享> > 如何在android中的工作管理器中传递POJO类?

如何在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