Estoy desarrollando una aplicación iOS/Android con React Native y recibo un error en Android.
Estoy usando la biblioteca expo-image-picker https://docs.expo.dev/versions/latest/sdk/imagepicker/
Este es el código que funciona perfectamente en iOS:
const prepareResult = await ImagePicker.launchImageLibraryAsync({ quality: 0.5, capture: true, aspect: [4, 3], allowsEditing: true, allowsMultipleSelection: false, mediaTypes: ImagePicker.MediaTypeOptions.Images, }); const androidResult = await ImagePicker.getPendingResultAsync(); const result = androidResult?.length ? androidResult[0] : prepareResult; if (!result.cancelled) { const localUri = result.uri; const filename = localUri.split("/").pop(); const match = filename ? /\.(\w+)$/.exec(filename) : ""; const type = match ? `image/${match[1]}` : `image`; const formData = new FormData(); formData.append("file", { uri: localUri, name: filename, type }); fetch(`${API}/uploadAvatar`, { method: "POST", headers: { Authorization: bearer, "X-Requested-With": "XMLHttpRequest", "Content-Type": "application/json", }, body: formData, }) .then((response) => response.json()) .then((json) => { setImage(json.file); }) .catch((err) => { console.log({ err }); Alert.alert("There was an error uploading your profile picture."); }); } En Android, después de recortar la imagen, va directamente al método .catch sin siquiera pasar por ninguno de los métodos .then .
Revisé esto https://docs.expo.dev/versions/latest/sdk/imagepicker/#imagepickergetpendingresultasync que contiene una nota:
Nota: asegúrese de manejar la destrucción de MainActivity en Android. Consulte ImagePicker.getPendingResultAsync.
¿Alguna idea sobre este error?
Si no es un proyecto de expo , sino un proyecto react-native ,
Se recomienda usar un react-native-image-cropicker .
import ImagePicker from 'react-native-image-crop-picker'; //select image ImagePicker.openPicker({ width: 300, height: 400, cropping: true }).then(image => { console.log(image); }); //select from Camera ImagePicker.openCamera({ width: 300, height: 400, cropping: true, }).then(image => { console.log(image); });