Как разрешить ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: DefaultDispatcher-worker-4 ⇐ Android
Как разрешить ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: DefaultDispatcher-worker-4
Я написал новый вариант использования для связи с API, который использует Flow. Я предполагаю, что я неправильно передаю потоки в сценарии использования между основным потоком и потоком ввода-вывода,
Вот какую ошибку я получаю
-01-18 02:20:40.555 26602-26870/com.xxx.xx.staging E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: DefaultDispatcher-worker-4 Процесс: com.xxx.xx.staging, PID: 26602 java.lang.IllegalStateException: шина событий [шина «fill_order»] доступна из неосновного потока, ноль на com.squareup.otto.ThreadEnforcer$2.enforce(ThreadEnforcer.java:47) на com.squareup.otto.Bus.post(Bus.java:317) по адресу com.xxx.xx.fragments.filller.fillorder.BasefillOrderFragment.postFldeckStatusUpdateEvent(BasefillOrderFragment.java:117) по адресу com.xxx.xx.fragments.filller.fillorder.fillOrderDataFragment.postFldeckStatusUpdateEvent(fillOrderDataFragment.java:1955) по адресу com.xxx.xx.fragments.filller.fillorder.fillOrderDataFragment.updateView(fillOrderDataFragment.java:845) по адресу com.xx.xx.fragments.filller.fillorder.fillOrderDataFragment.legacyUpdateView(fillOrderDataFragment.java:2317) по адресу com.xxx.xx.clean.fillorder.presenter.BasefillDataPresenter.onStartfilllingSuccess(BasefillDataPresenter.kt:460) по адресу com.xxx.xx.clean.fillorder.presenter.BasefillDataPresenter.handleStartfilllingClicked(BasefillDataPresenter.kt:315) по адресу com.xxx.xx.clean.fillorder.presenter.BasefillDataPresenter.access$handleStartfilllingClicked(BasefillDataPresenter.kt:49) Ошибка связана с handleStartfilllingClicked(view, it) в файле . собирать
Я вызываю вариант использования startfilllingUseCaseFlow, и это может быть проблемой
@FlowPreview весело initFlowSubscription (просмотр: Просмотр) { запуск { view.startfilllingObservableFlow .conflate() .ловить { onStartfilllingError (просмотр) } .flatMapMerge { если (!hasOpenInopIncidents()) { EquipmentProvider.get()?.let { startfilllingUseCaseFlow(StartfilllingUseCaseFlow.Params(it)) }!! } еще { val инцидентOpenResponse = GenericResponse(false) инцидентOpenResponse.error = OPEN_INCIDENTS потокОф(инцидентОткрытыйОтвет) } } .собирать { handleStartfilllingClicked(view, it) // ОШИБКА ЗДЕСЬ } } } частное развлечение handleStartfilllingClicked (просмотр: View, ответ: GenericResponse) { if (response.success == false && response.error == OPEN_INCIDENTS) { view.showCannotProceedInopIncidentDialog() view.hideLoader(ложь) возвращаться } onStartfilllingSuccess(view) // Ошибка здесь } НачатьзаполнениеUseCaseFlow
класс StartfilllingUseCaseFlow @Inject конструктор( частный вал currentOrderStorage: CurrentOrderStorage, частный вал fillOrderRepository: fillOrderRepository, частное приложение Val: Приложение ): FlowUseCase() { переопределить приостановку развлечения run(params: Params): Flow { вал startTime = DateTime() val действие = TimestampedAction( app.session.user.id, ноль, время начала ) return flowOf(fillOrderRepository.startfilllingSuspend( currentOrderStorage.fillOrder!!.id, действие )).onEach { onSuccess(startTime, params.equipment) } .catch { e -> e.message?.let { onError(it) } } .flowOn(Диспетчеры.IO) } личное развлечение onSuccess(startTime: DateTime, Equipment: Equipment) { if (currentOrderStorage.getfillOrder() == null) return currentOrderStorage.getfillOrder()!!.setStatus(fillOrderData.STATUS_fillLING) Equipment.times.start = время начала приложение.saveState() } частное развлечение onError (errorMessage: String) { Timber.e(errorMessage, "Ошибка вызова, начало заполнения! %s", errorMessage) } класс данных Params(val Equipment: Equipment) } Я предполагаю, что здесь неправильно обрабатываю ввод-вывод и основной поток
абстрактный класс FlowUseCase() { абстрактная приостановка забавного запуска (params: Params): Flow оператор приостановки fun ignore(params: Params): Flow = run(params).flowOn(Dispatchers.IO) } Не могли бы вы подсказать, где я ошибаюсь
Спасибо Р
Я написал новый вариант использования для связи с API, который использует Flow. Я предполагаю, что я неправильно передаю потоки в сценарии использования между основным потоком и потоком ввода-вывода,
Вот какую ошибку я получаю
-01-18 02:20:40.555 26602-26870/com.xxx.xx.staging E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: DefaultDispatcher-worker-4 Процесс: com.xxx.xx.staging, PID: 26602 java.lang.IllegalStateException: шина событий [шина «fill_order»] доступна из неосновного потока, ноль на com.squareup.otto.ThreadEnforcer$2.enforce(ThreadEnforcer.java:47) на com.squareup.otto.Bus.post(Bus.java:317) по адресу com.xxx.xx.fragments.filller.fillorder.BasefillOrderFragment.postFldeckStatusUpdateEvent(BasefillOrderFragment.java:117) по адресу com.xxx.xx.fragments.filller.fillorder.fillOrderDataFragment.postFldeckStatusUpdateEvent(fillOrderDataFragment.java:1955) по адресу com.xxx.xx.fragments.filller.fillorder.fillOrderDataFragment.updateView(fillOrderDataFragment.java:845) по адресу com.xx.xx.fragments.filller.fillorder.fillOrderDataFragment.legacyUpdateView(fillOrderDataFragment.java:2317) по адресу com.xxx.xx.clean.fillorder.presenter.BasefillDataPresenter.onStartfilllingSuccess(BasefillDataPresenter.kt:460) по адресу com.xxx.xx.clean.fillorder.presenter.BasefillDataPresenter.handleStartfilllingClicked(BasefillDataPresenter.kt:315) по адресу com.xxx.xx.clean.fillorder.presenter.BasefillDataPresenter.access$handleStartfilllingClicked(BasefillDataPresenter.kt:49) Ошибка связана с handleStartfilllingClicked(view, it) в файле . собирать
Я вызываю вариант использования startfilllingUseCaseFlow, и это может быть проблемой
@FlowPreview весело initFlowSubscription (просмотр: Просмотр) { запуск { view.startfilllingObservableFlow .conflate() .ловить { onStartfilllingError (просмотр) } .flatMapMerge { если (!hasOpenInopIncidents()) { EquipmentProvider.get()?.let { startfilllingUseCaseFlow(StartfilllingUseCaseFlow.Params(it)) }!! } еще { val инцидентOpenResponse = GenericResponse(false) инцидентOpenResponse.error = OPEN_INCIDENTS потокОф(инцидентОткрытыйОтвет) } } .собирать { handleStartfilllingClicked(view, it) // ОШИБКА ЗДЕСЬ } } } частное развлечение handleStartfilllingClicked (просмотр: View, ответ: GenericResponse) { if (response.success == false && response.error == OPEN_INCIDENTS) { view.showCannotProceedInopIncidentDialog() view.hideLoader(ложь) возвращаться } onStartfilllingSuccess(view) // Ошибка здесь } НачатьзаполнениеUseCaseFlow
класс StartfilllingUseCaseFlow @Inject конструктор( частный вал currentOrderStorage: CurrentOrderStorage, частный вал fillOrderRepository: fillOrderRepository, частное приложение Val: Приложение ): FlowUseCase() { переопределить приостановку развлечения run(params: Params): Flow { вал startTime = DateTime() val действие = TimestampedAction( app.session.user.id, ноль, время начала ) return flowOf(fillOrderRepository.startfilllingSuspend( currentOrderStorage.fillOrder!!.id, действие )).onEach { onSuccess(startTime, params.equipment) } .catch { e -> e.message?.let { onError(it) } } .flowOn(Диспетчеры.IO) } личное развлечение onSuccess(startTime: DateTime, Equipment: Equipment) { if (currentOrderStorage.getfillOrder() == null) return currentOrderStorage.getfillOrder()!!.setStatus(fillOrderData.STATUS_fillLING) Equipment.times.start = время начала приложение.saveState() } частное развлечение onError (errorMessage: String) { Timber.e(errorMessage, "Ошибка вызова, начало заполнения! %s", errorMessage) } класс данных Params(val Equipment: Equipment) } Я предполагаю, что здесь неправильно обрабатываю ввод-вывод и основной поток
абстрактный класс FlowUseCase() { абстрактная приостановка забавного запуска (params: Params): Flow оператор приостановки fun ignore(params: Params): Flow = run(params).flowOn(Dispatchers.IO) } Не могли бы вы подсказать, где я ошибаюсь
Спасибо Р
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение