【发布时间】:2020-10-16 10:02:33
【问题描述】:
我正在尝试在 nuget 包 Xamarin.Android.Arch.Work.Runtime 中使用 WorkManager 的 Xamarin 实现。
问题是:如何将“复杂”的参数传递给worker类?
我有一个带有 DI 和其他类的 Xamarin Forms 应用程序,但该作业只收到 Java.Lang.Object。
我的代码:
// Method to Schedule the Job
// See the dataParam? That line throw an exception
// I can manage to pass a simple string or int to the job this way, but not
// complex classes
public void ScheduleAppJobs(IContainerProvider containerRegistry)
{
//here the code throw an exception
var dataParam = new Data.Builder().Put("param", new JobParameter());
var syncWorkerReuest = PeriodicWorkRequest.Builder.From<SyncChecklistWorker>(TimeSpan.FromMinutes(5))
.SetInputData(dataParam.Build())
.Build();
WorkManager.Instance.Enqueue(syncWorkerReuest);
}
//this was my try to create a custom class and populate with my objects
//But didn't worked
public class JobParameter : Java.Lang.Object
{
}
//my job implementation
public class SyncChecklistWorker : Worker
{
public SyncChecklistWorker(Context context, WorkerParameters workerParameters) : base(context, workerParameters)
{
}
public override Result DoWork()
{
if (InputData.KeyValueMap.TryGetValue("param", out Java.Lang.Object @object))
{
var jobParam = (JobParameter)@object;
// here I would like to get my DI container to resolve services and execute business logic
// var diResolver = jobParam.GetDIContainer();
return Result.InvokeSuccess();
}
return Result.InvokeRetry();
}
}
}
问题是:
- 将输入数据传递给作业的唯一方法是 Data.Builder 只接受 Java.Lang.Object。甚至尝试使用 JobParameter : Java.Lang.Object 我在尝试执行时收到以下错误:
new Data.Builder().Put("param", new JobParameter());错误:Java.Lang.IllegalArgumentException: 'Key param has invalid type class crc648d221dddf00bc7fb.JobParameter' - 在官方 Microsoft Docs 中,FireBase Job Dispatcher nuget 已弃用。那么如何使用新的 WorkManager 呢?
FireBase 作业调度程序文档: https://docs.microsoft.com/en-us/xamarin/android/platform/firebase-job-dispatcher
已弃用的 nuget: https://www.nuget.org/packages/Xamarin.Firebase.JobDispatcher
知道如何解决这个问题吗?
【问题讨论】:
标签: xamarin xamarin.forms xamarin.android android-workmanager