Урок 32. WorkManager. Передача и получение данных

Ответить
Аватара пользователя
damager82
Администратор
Сообщения: 1383
Зарегистрирован: 07 янв 2012, 11:32
Контактная информация:

Урок 32. WorkManager. Передача и получение данных

Сообщение damager82 » 25 июн 2018, 10:38

В этом уроке рассмотрим как передать данные в задачу и как получить результат




Click here to read this article!
Последний раз редактировалось damager82 20 ноя 2019, 18:06, всего редактировалось 6 раз.
Добро пожаловать на форум сайта StartAndroid
ИзображениеИзображение

Ваняиван
Сообщения: 3
Зарегистрирован: 07 дек 2018, 18:05

Re: Урок 32. WorkManager. Передача и получение данных

Сообщение Ваняиван » 21 дек 2018, 09:48

Добрый день.

Как лучше быть в ситуации, когда мы описываем одни и теже входные данные для инициализации нескольких WorkRequest, но с небольшими отличиями? Напимер:

Код: Выделить всё

Data myData1 = new Data.Builder()
       .putInt("keyWorkInd", 1)
       .putInt("keyWorkTime", 3000)
       .build();

Data myData2 = new Data.Builder()
       .putInt("keyWorkInd", 2)
       .putInt("keyWorkTime", 3000)
       .build();

Data myData3 = new Data.Builder()
       .putInt("keyWorkInd", 3)
       .putInt("keyWorkTime", 3000)
       .build();

Data myData4 = new Data.Builder()
       .putInt("keyWorkInd", 4)
       .putInt("keyWorkTime", 3000)
       .build();

Data myData5 = new Data.Builder()
       .putInt("keyWorkInd", 5)
       .putInt("keyWorkTime", 3000)
       .build();
Нужно ли создавать все эти объекты? Или есть уже какой-нибудь встроенный способ, что бы менялся 1 входной параметр?

Ваняиван
Сообщения: 3
Зарегистрирован: 07 дек 2018, 18:05

Re: Урок 32. WorkManager. Передача и получение данных

Сообщение Ваняиван » 21 дек 2018, 10:49

Я попробовал сделать так:

Код: Выделить всё


       OneTimeWorkRequest[] arrayMyWorkRequest = new OneTimeWorkRequest[5] ;

        for (int i=0; i<5; i++){
            arrayMyWorkRequest[i] = new OneTimeWorkRequest.Builder(MyWorker.class).addTag("myWork")
                    .setInputData(new Data.Builder().putInt("TimeWork",3).putInt("KeyWorkInd",i).build())
                    .build();
        }


        mRunnable = new Runnable() {
            public void run() {
                // вычисляем время
                Log.d(TAG,"mRunnable");
                WorkManager.getInstance()
                        .beginUniqueWork("work123", ExistingWorkPolicy.KEEP, arrayMyWorkRequest[0])
                        .then(arrayMyWorkRequest[1])
                        .then(arrayMyWorkRequest[2])
                        .then(arrayMyWorkRequest[3])
                        .then(arrayMyWorkRequest[4])
                        .enqueue();

            }
        };

        mHandler.postDelayed(mRunnable, 1000);
        mHandler.postDelayed(mRunnable, 10000);

Но в логах появляется слово "crash":

2018-12-21 10:50:12.893 14964-14964/ru.vanyaivan.myapplicationworkmanager D/working: mRunnable
2018-12-21 10:50:12.961 14964-14989/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker0: start
2018-12-21 10:50:15.961 14964-14989/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker0: end
2018-12-21 10:50:15.984 14964-14995/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker1: start
2018-12-21 10:50:18.985 14964-14995/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker1: end
2018-12-21 10:50:19.000 14964-14996/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker2: start
2018-12-21 10:50:21.893 14964-14964/ru.vanyaivan.myapplicationworkmanager D/working: mRunnable

--------- beginning of crash
2018-12-21 10:50:52.152 15032-15058/? D/working: MyWorker2: start
2018-12-21 10:50:55.193 15032-15058/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker2: end
2018-12-21 10:50:55.209 15032-15063/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker3: start
2018-12-21 10:50:58.249 15032-15063/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker3: end
2018-12-21 10:50:58.266 15032-15068/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker4: start
2018-12-21 10:51:01.284 15032-15068/ru.vanyaivan.myapplicationworkmanager D/working: MyWorker4: end

Скорей всего это происходит из-за KEEP, если его заменить на REPLACE, то все происходит как на уроке, где демонстрировалась работа при использовании REPLACE.

Ответить