Vis*_*a ツ 12 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();
Run Code Online (Sandbox Code Playgroud)
它使应用程序崩溃并显示诸如AddressBookData之类的错误不是有效的类。
注意:我想在工作管理器中传递POJO类,并在doWork方法中从工作管理器获取InputData。
今天,我也面临这个问题。所以我找到了如何传递对象的方法。
我的要求是传递Bitmap对象。(您可以根据需要通过)
在gradle文件中添加依赖项
摇篮:
dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
}
Run Code Online (Sandbox Code Playgroud)
使用以下方法对对象进行序列化和反序列化
// Serialize a single object.
public static String serializeToJson(Bitmap bmp) {
Gson gson = new Gson();
return gson.toJson(bmp);
}
// Deserialize to single object.
public static Bitmap deserializeFromJson(String jsonString) {
Gson gson = new Gson();
return gson.fromJson(jsonString, Bitmap.class);
}
Run Code Online (Sandbox Code Playgroud)
序列化对象。
String bitmapString = Helper.serializeToJson(bmp);
Run Code Online (Sandbox Code Playgroud)
传递给数据对象。
Data.Builder builder = new Data.Builder();
builder.putString("bmp, bitmapString);
Data data = builder.build();
OneTimeWorkRequest simpleRequest = new OneTimeWorkRequest.Builder(ExampleWorker.class)
.setInputData(data)
.build();
WorkManager.getInstance().enqueue(simpleRequest);
Run Code Online (Sandbox Code Playgroud)
在
Worker课堂上处理您的价值。
Data data = getInputData();
String bitmapString = data.getString(NOTIFICATION_BITMAP);
Bitmap bitmap = Helper.deserializeFromJson(bitmapString);
Run Code Online (Sandbox Code Playgroud)
现在,您的位图对象已在Worker类中准备就绪。
干杯!
| 归档时间: |
|
| 查看次数: |
3379 次 |
| 最近记录: |