Seguí todas las instalaciones de la expo con respecto a firebase, para web y android. Cuando ejecuto la aplicación en la web, obtengo los datos bien, sin embargo, cuando la ejecuto en Android, el método onValue no se ejecuta.
Tampoco da errores.
import { StyleSheet, Text, View, FlatList, TouchableOpacity } from 'react-native'; import {useEffect, useState } from 'react' import { getDatabase, onValue, ref } from 'firebase/database'; import { fb } from '../firebaseConfig' import { LogBox } from 'react-native'; const db = getDatabase(); LogBox.ignoreLogs(['Setting a timer']); const HomePage = ({navigation})=>{ const [count, setCount] = useState([]); useEffect(() => { const cart = ref(db,"cart/"); onValue(cart,(snapshot)=>{ const data = snapshot.val(); console.log(data) setCount(data) }) },[]); const sendData = (name, surname) =>{ navigation.navigate('Map', { name: name, surname: surname} ) } return( <View> <FlatList data = {Object.keys(count)} renderItem={({item})=> <TouchableOpacity onPress={() => {sendData(count[item].name, count[item].Surname)}}> <Text>{count[item].name}</Text> </TouchableOpacity>} keyExtractor={(item, index) => index.toString()} /> </View> ) } export default HomePage esta es mi app.json
"expo": { "name": "my-app", "slug": "my-app", "version": "1.0.0", "orientation": "portrait", "icon": "./assets/icon.png", "splash": { "image": "./assets/splash.png", "resizeMode": "contain", "backgroundColor": "#ffffff" }, "updates": { "fallbackToCacheTimeout": 0 }, "assetBundlePatterns": [ "**/*" ], "ios": { "supportsTablet": true }, "android": { "package": "com.mypackage.myapp", "googleServicesFile": "./google-services.json", "adaptiveIcon": { "foregroundImage": "./assets/adaptive-icon.png", "backgroundColor": "#FFFFFF" } }, "web": { "favicon": "./assets/favicon.png" } } }¿Me estoy perdiendo de algo?
Dado que no está pasando una devolución de llamada de error como tercer argumento a onValue() , puede parecer que la función no se activa cuando realmente se ejecutó, pero luego falló y se canceló.
La falla puede deberse a un error de permiso, por lo tanto, asegúrese de agregar una función cancelCallback .
De los documentos :
Una devolución de llamada opcional que será notificada si su suscripción al evento se cancela alguna vez porque su cliente no tiene permiso para leer estos datos (o tenía permiso pero ahora lo perdió). A esta devolución de llamada se le pasará un objeto de error que indica por qué ocurrió la falla.
export declare function onValue( query: Query, callback: (snapshot: DataSnapshot) => unknown, cancelCallback?: (error: Error) => unknown // <--- error handler ): Unsubscribe;