gpt4 book ai didi

android - 如何在 android 中将复杂类型的对象传递给 WorkManager。即列表、 map 、POJO

转载 作者:行者123 更新时间:2023-12-02 10:43:18 24 4
gpt4 key购买 nike

WorkManager 是一个用于将工作排队的库,保证在满足其约束后执行。 WorkManager 允许观察工作状态并能够创建复杂的工作链。

支持的有效类型仅: bool 型、整数、长整型、 double 型、字符串以及每种类型的数组版本。

// Define the Worker class:
public class MathWorker extends Worker {

// Define the parameter keys:
public static final String KEY_X_ARG = "X";
public static final String KEY_Y_ARG = "Y";
public static final String KEY_Z_ARG = "Z";
// ...and the result key:
public static final String KEY_RESULT = "result";

public MathWorker(
@NonNull Context context,
@NonNull WorkerParameters params) {
super(context, params);
}

@Override
public Worker.Result doWork() {
// Fetch the arguments (and specify default values):
int x = getInputData().getInt(KEY_X_ARG, 0);
int y = getInputData().getInt(KEY_Y_ARG, 0);
int z = getInputData().getInt(KEY_Z_ARG, 0);

// ...do the math...
int result = myCrazyMathFunction(x, y, z);

//...set the output, and we're done!
Data output = new Data.Builder()
.putInt(KEY_RESULT, result)
.build();
setOutputData(output);
return Result.SUCCESS;
}
}

我如何传递复杂类型,例如:

Map<String, Object> studListMap = new HashMap<>();
studListMap.put("list", studentDetails);

// Create the Data object:
@SuppressLint("RestrictedApi")
Data myData = new Data.Builder()
.put(KEY_STUD_LIST_ARG,studListMap)
.build();

//set network required
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();

最佳答案

如果可能,您可以序列化您的 POJO。例如,如果它确实很小很简单,您可以使用 JSON 将其编码为字符串,然后在 Worker 中对其进行解码。

已使用 gson,因为它已经是此应用程序中的依赖项。

 Map<String, Object> studListMap = new HashMap<>();
studListMap.put("list", studentDetails);

Type listOfStudObject = new TypeToken<List<StudentDetails>>(){}.getType();
String s = gson.toJson(studentDetails, listOfStudObject);

// Create the Data object:
@SuppressLint("RestrictedApi")
Data myData = new Data.Builder()
.putString(KEY_STUD_LIST_ARG,s)
.build();

//set network required
Constraints myConstraints = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build();

// ...then create and enqueue a OneTimeWorkRequest that uses those arguments
OneTimeWorkRequest attendWork = new OneTimeWorkRequest.Builder(AddAttendanceWorker.class)
.setConstraints(myConstraints)
.setInputData(myData)
.build();

WorkManager.getInstance()
.enqueue(attendWork);

关于android - 如何在 android 中将复杂类型的对象传递给 WorkManager。即列表、 map 、POJO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53172079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com