как показать тост в WorkManager doWork ()

как показать тост в WorkManager do work ()?

Когда я пытаюсь, бросает

Caused by: java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

person Nurseyit Tursunkulov    schedule 01.06.2019    source источник


Ответы (2)


Вы можете создать обработчик, чтобы показывать тост в потоке пользовательского интерфейса.

Ваш doWork метод будет выглядеть так:

@NonNull
@Override
public Result doWork() {
    Log.d(TAG, "doWork for Sync");

    Handler handler = new Handler(Looper.getMainLooper());
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            // Run your task here
            Toast.makeText(mContext, "Testing", Toast.LENGTH_SHORT).show();
        }
    }, 1000 );

    return Result.success();
}

Примечание: mContext будет доступен в Конструкторе.

Надеюсь, это поможет тебе. Спасибо.

person Pratik Butani    schedule 03.06.2019
comment
решение работает хорошо, но если вам нужно запустить его в фоновом режиме, этого не произойдет. Потому что это требует контекста, так что имейте в виду! - person Nurseyit Tursunkulov; 05.06.2019
comment
Контекст @NurseyitTursunkulov в любом случае доступен внутри воркеров через getApplicationContext(), поэтому он будет работать независимо от привязки. - person VPZ; 13.11.2020
comment
Это работает как шарм, ты спасатель жизни - person Emmanuel Njorodongo; 13.04.2021

Также нашел альтернативное решение, которое тоже сработало для меня:

@Override
public Result doWork() {
    context.getMainExecutor().execute(() -> Toast.makeText(context, "Сас ))", Toast.LENGTH_LONG).show());
    return Result.success();   // may be done with handler
}

Но также я сохранил переменную Context в поле класса

Context context;

public BackgroundWorker(Context context, WorkerParameters workerParams) {
    super(context, workerParams);
    this.context = context;
}
person buba1219    schedule 13.06.2021