Как разрешить ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: DefaultDispatcher-worker-4Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как разрешить ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: DefaultDispatcher-worker-4

Сообщение Anonymous »


Я написал новый вариант использования для связи с 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) } Не могли бы вы подсказать, где я ошибаюсь

Спасибо Р
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»