簡體   English   中英

Expo 圖像選擇器:未處理 promise 拒絕:TypeError:未定義不是 object

[英]Expo Image Picker: Unhandled promise rejection: TypeError: undefined is not an object

我目前正在開發一個小型應用程序,我想將相機膠卷中的圖像加載到應用程序中。 我已經在其文檔中的 Expo Image Picker 的幫助下構建了一個組件。 可悲的是,我總是在我的 expo 客戶端中收到以下警告,並且我無法從相機膠卷中挑選任何圖像。 當我單擊 select 它們的按鈕時,它就保持原樣。

我的代碼:

import React, {useEffect, useState} from 'react';
import { View, Image, TouchableOpacity, PermissionsAndroid, Alert, Platform, StyleSheet } from 'react-native';
import * as Permissions from 'expo-permissions';
import ImagePicker from 'expo-image-picker';
import { MaterialIcons } from '@expo/vector-icons'

export default function ImageChooser() {
    const [imageSource, setImageSource] = useState([]);

    getPermissionAsync = async () => {
        
          const { status } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
          if (status !== 'granted') {
            alert('Sorry, we need camera roll permissions to make this work!');
          }
          
    };
    
    useEffect(() => {
        getPermissionAsync();
    }, []);
    
    _getPhotoLibrary = async () => {
        let result = await ImagePicker.launchImageLibraryAsync({
         allowsEditing: true,
         aspect: [4, 3]
        });
        if (!result.cancelled) {
         setImageSource({ image: result.uri });
        }
    }
    

    return (
        <View style={styles.container}>
            <TouchableOpacity style={styles.button} onPress={() => _getPhotoLibrary()}>
                {!imageSource && <MaterialIcons name="add-a-photo" style={styles.icon} size={36} />}
                {/* {imageSource && <Image source={{uri:imageSource}} style={styles.image} />} */}
            </TouchableOpacity>
        </View>
    )
}

const styles = StyleSheet.create({
    container: {
        paddingLeft: 20,
        paddingVertical: 10
    },    
    button: {
        flex: 1,
        alignItems: 'center',
        justifyContent: 'center',
        width: 200,
        height: 150,
        borderWidth: 1,
        borderColor: '#C6C6C8',
        borderRadius: 5,
        backgroundColor: '#fff'
    },
    image: {
        width: 200,
        height: 150
    },
    icon: {
        color: '#C6C6C8'
    }
})

我收到的警告:

[Unhandled promise rejection: TypeError: undefined is not an object (evaluating '_expoImagePicker.default.launchImageLibraryAsync')]
* components/ImageChooser.js:23:23 in _getPhotoLibrary
- node_modules/regenerator-runtime/runtime.js:63:36 in tryCatch
- node_modules/regenerator-runtime/runtime.js:293:29 in invoke
- node_modules/regenerator-runtime/runtime.js:63:36 in tryCatch
- node_modules/regenerator-runtime/runtime.js:154:27 in invoke
- node_modules/regenerator-runtime/runtime.js:189:16 in PromiseImpl$argument_0
- node_modules/react-native/node_modules/promise/setimmediate/core.js:45:6 in tryCallTwo
- node_modules/react-native/node_modules/promise/setimmediate/core.js:200:22 in doResolve
- node_modules/react-native/node_modules/promise/setimmediate/core.js:66:11 in Promise
- node_modules/regenerator-runtime/runtime.js:188:15 in callInvokeWithMethodAndArg
- node_modules/regenerator-runtime/runtime.js:211:38 in enqueue
- node_modules/regenerator-runtime/runtime.js:238:8 in exports.async
* components/ImageChooser.js:23:23 in _getPhotoLibrary
* components/ImageChooser.js:36:61 in TouchableOpacity.props.onPress
- node_modules/react-native/Libraries/Pressability/Pressability.js:691:17 in _performTransitionSideEffects
- node_modules/react-native/Libraries/Pressability/Pressability.js:628:6 in _receiveSignal
- node_modules/react-native/Libraries/Pressability/Pressability.js:524:8 in responderEventHandlers.onResponderRelease
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:265:4 in invokeGuardedCallbackImpl
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:476:2 in invokeGuardedCallback
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:500:2 in invokeGuardedCallbackAndCatchFirstError
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:597:41 in executeDispatch
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:621:19 in executeDispatchesInOrder
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:2521:28 in executeDispatchesAndRelease
* [native code]:null in forEach
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:836:4 in forEachAccumulated
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:2546:20 in runEventsInBatch
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:2702:18 in runExtractedPluginEventsInBatch
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:2639:35 in batchedUpdates$argument_0
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:17712:13 in batchedUpdates$1
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:2492:29 in batchedUpdates
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:2638:16 in _receiveRootNodeIDEvent
- node_modules/react-native/Libraries/Renderer/implementations/ReactNativeRenderer-dev.js:2767:27 in receiveTouches
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:416:4 in __callFunction
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:109:6 in __guard$argument_0
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:364:10 in __guard
- node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:108:4 in callFunctionReturnFlushedQueue
* [native code]:null in callFunctionReturnFlushedQueue

您錯誤地導入了ImagePicker

使用import * as ImagePicker from 'expo-image-picker';

這是參考文檔: https://docs.expo.io/versions/latest/sdk/imagepicker/

讓您將其包含在 app.json 中。

{
  "expo": {
    "plugins": [
      [
        "expo-image-picker",
        {
          "photosPermission": "The app accesses your photos to let you share them with your friends."
        }
      ]
    ]
  }
}

在您的 app.json(應用程序配置文件)中將“expo-image-picker”數組添加到 plgins 數組。 要了解有關 app.json 的更多信息,請閱讀: https://docs.expo.dev/versions/v46.0.0/config/app/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM