class CompressWorker(context : Context, params : WorkerParameters)
: Worker(context, params) {
override fun doWork(): Result {
// Do the work here--in this case, compress the stored images.
// In this example no parameters are passed; the task is
// assumed to be "compress the whole library."
myCompress()
// Indicate success or failure with your return value:
return Result.SUCCESS
// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
}
}
val compressionWork = OneTimeWorkRequestBuilder<CompressWorker>().build()
Wie kann ich eine erstellen Worker die Parameter im Konstruktor oder akzeptieren doWork?
Dhaval Patel
Sie können verwenden setInputData Methode zum Senden von Daten, genau wie Bundle.
/*** Logic to set Data while creating worker **/
val compressionWork = OneTimeWorkRequest.Builder(CompressWorker::class.java)
val data = Data.Builder()
//Add parameter in Data class. just like bundle. You can also add Boolean and Number in parameter.
data.putString("file_path", "put_file_path_here")
//Set Input Data
compressionWork.setInputData(data.build())
//enque worker
WorkManager.getInstance().enqueue(compressionWork.build())
/*** Logic to get Data ***/
class CompressWorker(context : Context, params : WorkerParameters)
: Worker(context, params) {
override fun doWork(): Result {
//get Input Data back using "inputData" variable
val filePath = inputData.getString("file_path")
// Do the work here--in this case, compress the stored images.
// In this example no parameters are passed; the task is
// assumed to be "compress the whole library."
myCompress()
// Indicate success or failure with your return value:
return Result.SUCCESS
// (Returning RETRY tells WorkManager to try this task again
// later; FAILURE says not to try again.)
}
}
Weitere Informationen finden Sie hier Verknüpfung.
Wie kann ich auf die Daten in Worker zugreifen?
– Josua
4. Oktober 2018 um 4:37 Uhr
params.getInputData().getString(“Dateipfad”)
– Titto José
21. Dezember 2018 um 6:08 Uhr
Gibt es eine Möglichkeit, nicht primitive Werte als Parameter zu senden?
– Óscar
8. Mai 2019 um 15:48 Uhr
Um den @Óscar-Punkt zu beantworten, finden Sie hier eine Diskussion darüber, wie ein serialisierbares POJO an einen Worker übergeben wird. stackoverflow.com/questions/51018299/…
– Marino
26. Oktober 2020 um 11:51 Uhr
@Óscar Seien Sie vorsichtig, wenn Sie versuchen, es zu verwenden workDataOf. Trotz seiner Methodensignatur können Sie seit dem Ergebnis nichts anderes als Primitive übergeben Data Objekt kann nur Primitive oder Arrays von Primitives enthalten. Sie erhalten eine IllegalArgumentException wenn Sie versuchen, etwas anderes zu passieren.
– nkotula
25. Mai 2021 um 16:57 Uhr
In Java:
Übergeben Sie die Parameter wie folgt:
Constraints.Builder builder = new Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED);
// Passing params
Data.Builder data = new Data.Builder();
data.putString("SyncMaster", syncModuleName);
OneTimeWorkRequest syncWorkRequest =
new OneTimeWorkRequest.Builder(SyncWorker.class)
.addTag("Sync")
.setInputData(data.build())
.setConstraints(builder.build())
.build();
WorkManager.getInstance().enqueue(syncWorkRequest);
Sie können wie folgt erhalten:
public class SyncWorker extends Worker {
private static final String TAG = "MyWorker";
public SyncWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
mContext = context;
}
@NonNull
@Override
public Result doWork() {
Log.d(TAG, "doWork for Sync");
String syncTable = getInputData().getString("SyncMaster");
return Result.success();
}
}
Hoffe, es wird eindeutig helfen.
13940400cookie-checkWie erstelle ich einen Worker mit Parametern für in WorkManager für Android?yes