e Unlended Softexception
Java.lang.runtimeexception: React Native Exaten /> comm.facebook.react.bridge.basejavamodule.getReactApplicationContextifactiveorWarn(basejavamodule.java:125)
at
com.facebook.react.modules.core.timingmodule.access$000.
at
comm.facebook.react.modules.core.timingmodule $ bridgetimerexecutor.calltimers(timingmodule.java:28)
at
com.facebook.react.modules.core.javatimermanager.createAndmayballimer 25Javatimermanager.javatimermanager.createAndmayballimer .javatimermanager.javatimermanager.createAndmayballimer : 345)
at
com.facebook.react.modules.core.timingmodule.createtimer(timingmodule.java:84)
at java.lang.reflect.method.invoke (родной метод)
at
comm.facebook.react.bridge.javamethodwrapper.invoke(javamethodwrapper.java:372)
at
в com.facebook.jni.nativerunnable.run (нативный метод)
at android.os.handler.handlecallback (handler.java:938)
at android.os.handler.dispatchmessage (handler.java:99 )
at
comm.facebook.react.bridge.queue.messagequeuthreadhandler.dispatchmessage(messagequeuethreadhandler.java:27)
at android.os.looper.loop (looper.java:246)
at
comm.facebook.react.bridge.queue.messagequeuthreadimpld44.run(messagequeuthreadimpl.java:233)образно br />
e uktedled softexception
com.facebook.react.bridge.reactnocrashsoftexception:
ConnectAnimatedNodetoView: анимированный узел не может быть подключен к
uimanager - uimanager исчез для тега: 797
at
comm.facebook.react.animated.nativeanimatednodesmanager.connectanimatednodetoview(nativeanimatednodesmanager.java:438)
at
com.facebook.react.animated.nativeanimatedModuleD18.executeBeanImated.J.NatiVeanImatedModuleD18.executeVeanImated.J.nativeanImatedModuleD18. /> at
com.facebook.react.animated.nativeanimatedmoduledcurrentoperation quepueue.executebatch(nativeanimatedmodule.java:171)
at
comm.facebook.react.animated.nativeanimatedmoduled33.execute(nativeanimatedmodule.java:365)
at
com.facebook.react.uimanager.uiviewoperationqueueduiboperation.execute .uimanager.uiviewoperationqueueDuiboperation.execute.
at
comm.facebook.react.uimanager.uiviewoperationqueued1.run(uiviewoperation quepueue.java:910)
at
в
comm.facebook.react.uimanager.uiviewoperation quideeue.-$$nest$mflushpendingbatches(unknown
Источник: 0)
at
com.facebook.react.uimanager.uiviewoperationqueue $ 2.Runguarded ( Uiviewoperequeue.java:979)
at
comm.facebook.react.bridge.guardedrunnable.run(guardedrunnable.java:29)
at android.os.handler.handlecallback (Handler.java:938)
at android.os.handler. DispatchMessage (Handler.java:99)
at Android.os.looper.loop (looper.java:246)
at android.app.activitythread.main (ActivityThread.java:8653)
at java.lang.reflect.method.invoke (нативный метод )
at
comm.android.internal.os.runtimeinit$methodandargscaller.run(runtimeinit.java:602)
at com.android.Internal.os.zygoteinit.main (zygoteinit.java:1130) < /p> < /blockquote>
code: < /p>
Код: Выделить всё
import React, { useEffect, useState } from 'react';
import { View, Text, TouchableOpacity, TextInput, Alert, AppState, AppStateStatus, AlertButton } from 'react-native';
import * as SecureStore from 'expo-secure-store';
import BackgroundCustomColor from '@/components/Jornada/BackgroundCustomColor';
import { MaterialCommunityIcons, Octicons } from '@expo/vector-icons';
import { ScrollView } from 'react-native-gesture-handler';
import { ConfirmationJourney } from '@/components/Jornada/ConfirmationJourneyBackground';
import { Timer } from '@/components/Jornada/Timer';
import EventoService from '@/services/api/eventosService';
import QRCodeReader from '@/components/QRCodeReader';
import { verificarLiberacaoQRCode } from '@/utils/verifyParametros';
import UsuarioService from '@/services/api/usuarioService';
import Loading from '@/components/Loading';
import AlertService from '@/services/api/alertService';
import { useNavigation } from '@react-navigation/native';
import { NavigationProp } from '@/types/navigation';
import { useEventosDatabase } from '@/database/useEventosDatabase';
import deactivateBackButton from '@/utils/deactivateBackButton';
import DropDownPicker from 'react-native-dropdown-picker';
import { LISTA_VEICULOS_KEY } from '@/constants/consts';
import { IVeiculo } from '@/types/Veiculo';
import { useAuth } from '@/services/auth/AuthContext';
interface EventProps {
title: string;
color: string;
startEvent: string;
endEvent: string;
icon: React.ReactNode;
confirmationIcon: React.ReactNode;
isRefeicao?: boolean;
isDirecao?: boolean;
isAbastecimento?: boolean;
}
export default function Event({ title, color, startEvent, endEvent, icon, confirmationIcon, isRefeicao, isDirecao, isAbastecimento }: EventProps) {
const navigation = useNavigation();
const { authState } = useAuth();
const { createEvento, checkIsUltimoEvento, sendDirecaoData, sendAbastecimentoData } = EventoService();
const { checkTempoMinRefeicao, checkTempoMaxRefeicao, checkDirecaoTempoMax, checkEncerramentoTurno, checkLimiteEncerramentoTurno } = AlertService();
const [time, setTime] = useState(0);
const [startTimer, setStartTimer] = useState(false);
const [confirmationBox, setConfirmationBox] = useState(false);
const { confirmarLeituraQRCode } = UsuarioService();
const [QRCodeScanned, setQRCodeScanned] = useState();
const [openScanner, setOpenScanner] = useState(false);
const [loading, setLoading] = useState(false);
const [instanteEvento, setInstanteEvento] = useState(null);
// State para Direcao
const [dataEvento, setDataEvento] = useState();
const [dataFimEvento, setDataFimEvento] = useState();
const [hodometroValue, setHodometroValue] = useState();
const [hodometroInicial, setHodometroInicial] = useState();
const [hodometroFinal, setHodometroFinal] = useState();
const [openFirstDropdown, setOpenFirstDropdown] = useState(false);
const [itemsFirstDropdown, setItemsFirstDropdown] = useState([
{ label: 'Carregando', value: 1 },
{ label: 'Vazio', value: 2 }
]);
const [valueFirstDropdown, setValueFirstDropdown] = useState(itemsFirstDropdown[0].value);
const [openSecondDropdown, setOpenSecondDropdown] = useState(false);
const [itemsSecondDropdown, setItemsSecondDropdown] = useState([]);
const [valueSecondDropdown, setValueSecondDropdown] = useState();
// States para Abastecimento
const [litrosValue, setLitrosValue] = useState(null);
const [valorPorLitroValue, setValorPorLitroValue] = useState(null);
const [valorTotalValue, setValorTotalValue] = useState(null);
const [openDropdown, setOpenDropdown] = useState(false);
const [itemsDropdown, setItemsDropdown] = useState([
{ label: 'Alcool', value: 'AL' },
{ label: 'Gasolina', value: 'GA' },
{ label: 'Diesel', value: 'DI' }
]);
const [valueDropdown, setValueDropdown] = useState(itemsDropdown[0].value);
useEffect(() => {
deactivateBackButton(startTimer);
checkIsUltimoEvento(startEvent).then((isLastEvento) => {
if (isLastEvento?.isUltimoEvento) {
setStartTimer(true);
setInstanteEvento(isLastEvento.instanteEvento);
}
});
SecureStore.getItemAsync(LISTA_VEICULOS_KEY).then((result) => {
const veiculosData = JSON.parse(result!);
setHodometroValue(veiculosData[0].ultimoHodometro.toString() + ".00");
if (veiculosData) {
setItemsSecondDropdown(veiculosData?.map((item: IVeiculo) => {
return { label: item.placa, value: item.placa, hodometro: item.ultimoHodometro?.toString() };
}));
setValueSecondDropdown(veiculosData[0]?.placa);
}
}).catch((error) => console.log("Erro ao buscar lista de veiculos", error));
}, [startTimer]);
const handleAppStateChange = (nextAppState: AppStateStatus) => {
if (nextAppState === 'active') {
console.log('App has come to the foreground!');
// Reinitialize or refresh any necessary data here
}
};
useEffect(() => {
const subscription = AppState.addEventListener('change', handleAppStateChange);
return () => {
subscription.remove();
};
}, []);
const handleConfirmJourney = async () => {
try {
if (!startTimer) {
setLoading(true);
setStartTimer(true);
const res = await createEvento(startEvent);
setDataEvento(res);
setInstanteEvento(res);
if (isDirecao) {
setHodometroInicial(hodometroValue);
await checkDirecaoTempoMax();
}
await checkTempoMaxRefeicao();
setLoading(false);
} else if (startTimer) {
setLoading(true);
const res = await createEvento(endEvent);
setStartTimer(false);
if (isDirecao) {
setDataFimEvento(res);
setHodometroFinal(hodometroValue);
}
// Enviar dados de direcao
if (isDirecao && valueFirstDropdown && dataEvento && (res || dataFimEvento) && hodometroValue && valueSecondDropdown) {
const data = {
tipo: valueFirstDropdown,
dataEvento: dataEvento,
dataFimEvento: dataFimEvento ?? res,
hodometroInicial: Number(hodometroInicial),
hodometroFinal: Number(hodometroFinal) ?? Number(hodometroValue),
placa: valueSecondDropdown,
idVeiculo: authState?.user?.listaDeVeiculos.find((item) => item.placa === valueSecondDropdown)?.id!
};
await sendDirecaoData(data);
}
// Enviar dados de abastecimento
if (isAbastecimento && litrosValue && valorPorLitroValue && valorTotalValue && valueDropdown) {
const data = {
quantidadeAbastecida: litrosValue,
valorDia: valorPorLitroValue,
totalAbastecido: valorTotalValue,
tipoCombustivel: valueDropdown
};
await sendAbastecimentoData(data);
}
checkEncerramentoTurno();
checkLimiteEncerramentoTurno();
setInstanteEvento(null);
setLoading(false);
deactivateBackButton();
navigation.navigate("Jornada");
}
} catch (error) {
console.log("Erro ao confirmar jornada", error);
setLoading(false);
}
setConfirmationBox(false);
};
const handleQRCodeConfirmation = async () => {
if (await verificarLiberacaoQRCode(title)) {
if (QRCodeScanned) {
confirmarLeituraQRCode(QRCodeScanned).then((result) => {
if (result?.data.codigoRetorno === 1) {
setQRCodeScanned(null);
setLoading(false);
handleConfirmJourney();
} else if (result?.data.codigoRetorno === -1) {
Alert.alert(result.data.mensagem + " tente novamente!", undefined, [
{
text: 'OK', onPress: () => {
setOpenScanner(true);
}
} as AlertButton,
]);
setLoading(false);
setQRCodeScanned(null);
return;
}
}).catch((error) => {
console.log("ERROR", error);
alert("Ocorreu um erro. Tente novamente!");
setQRCodeScanned(null);
setOpenScanner(true);
return;
});
} else {
setOpenScanner(true);
}
} else {
handleConfirmJourney();
}
};
if (openScanner) return (
);
return (
{!confirmationBox ? (
{title}
{isDirecao && (
()}
ArrowDownIconComponent={() => ()}
placeholder="Seleciono o tipo"
ListEmptyComponent={() => Nenhum item}
open={openFirstDropdown}
value={valueFirstDropdown}
items={itemsFirstDropdown}
setOpen={() => {
setOpenFirstDropdown(!openFirstDropdown);
setOpenSecondDropdown(false);
}}
setValue={setValueFirstDropdown}
setItems={setItemsFirstDropdown}
/>
{itemsSecondDropdown.length > 0 && (
Nenhum item}
ArrowUpIconComponent={() => ()}
ArrowDownIconComponent={() => ()}
placeholder="PLACA"
placeholderStyle={{ color: "white" }}
open={openSecondDropdown}
value={valueSecondDropdown ?? null}
items={itemsSecondDropdown}
setOpen={() => {
setOpenSecondDropdown(!openSecondDropdown);
setOpenFirstDropdown(false);
}}
// @ts-ignore
onSelectItem={(item) => setHodometroValue(item.hodometro + ".00")}
setValue={setValueSecondDropdown}
setItems={setItemsSecondDropdown}
/>
)}
setHodometroValue(value)}
className='min-w-[90%] p-1 border-b-[1px] border-b-[#745419] text-2xl text-white uppercase'
placeholderTextColor={"white"}
keyboardType='number-pad'
placeholder='Hodômetro' />
)}
{isAbastecimento && (
()}
ArrowDownIconComponent={() => ()}
placeholder=""
open={openDropdown}
value={valueDropdown}
items={itemsDropdown}
setOpen={() => {
setOpenDropdown(!openDropdown);
}}
setValue={setValueDropdown}
setItems={setItemsDropdown}
/>
setLitrosValue(Number(value))}
className='min-w-[90%] p-1 border-b-[1px] border-b-[#431242] focus:border-b-[#008577] text-2xl text-white uppercase'
placeholderTextColor={"white"}
keyboardType='numeric'
placeholder='Litros Combustível' />
setValorPorLitroValue(Number(value))}
className='min-w-[90%] p-1 border-b-[1px] border-b-[#431242] focus:border-b-[#008577] text-2xl text-white uppercase'
placeholderTextColor={"white"}
keyboardType='numeric'
placeholder='Valor por Litro' />
setValorTotalValue(Number(value))}
className='min-w-[90%] p-1 border-b-[1px] border-b-[#431242] focus:border-b-[#008577] text-2xl text-white uppercase'
placeholderTextColor={"white"}
keyboardType='numeric'
placeholder='Valor Total' />
)}
{icon}
{startTimer ? (
{
setConfirmationBox(true);
isRefeicao && checkTempoMinRefeicao();
}}>
ENCERRAR
{title}
) : (
setConfirmationBox(true)}>
INICIAR
{title}
)}
) : (
handleQRCodeConfirmation()} onCancel={() => setConfirmationBox(false)}>
Deseja {time > 0 ? "ENCERRAR" : "INICIAR"} {title}?
{confirmationIcon}
)}
{loading && }
);
}
Я сжигаю свою голову, чтобы решить эту очень странная ошибка, любая помощь?
Подробнее здесь: https://stackoverflow.com/questions/794 ... nce-has-al
Мобильная версия