【问题标题】:ReferenceError: Can't find variable: Permissions and ReferenceError: Can't find variable: ImagePickerReferenceError:找不到变量:权限和 ReferenceError:找不到变量:ImagePicker
【发布时间】:2019-06-20 02:07:11
【问题描述】:

我退出了我的 react-native 项目,并正在使用 android studio 对其进行测试。但是,我不断收到错误消息:

ReferenceError:找不到变量:权限 ReferenceError:找不到变量:ImagePicker

我有一个上传按钮,让用户可以用相机拍照并上传照片。

这是上传功能的 react-native 代码:

import React from "react";
import { TextInput, ActivityIndicator, Image, TouchableOpacity, View, Text, StyleSheet } from "react-native";
import { f, auth, database, storage } from "../config/config.js";
import UserAuth from "../components/auth.js";


    _checkPermissions = async () => {
        const { status } = await Permissions.askAsync(Permissions.CAMERA);
        this.setState({
            camera: status
        });

        // take permission for Gallery, aka CameraRoll
        const { statusRoll } = await Permissions.askAsync(Permissions.CAMERA_ROLL);
        this.setState({
            cameraRoll: statusRoll
        });
    };





    findNewImage = async () => {
        this._checkPermissions();

        let result = await ImagePicker.launchCameraAsync({
            mediaTypes: "Images",
            allowsEditing: true,
            quality: 1
        });

        console.log("image picked is = result = ", result);

        if (!result.cancelled) {

            console.log("upload image");
            this.setState({
                imageSelected: true,
                imageId: this.uniqueId(),
                uri: result.uri
            });

        } else {

            console.log("cancel");
            this.setState({
                imageSelected: false
            });

        }
    };


这是android studio中的错误信息:

W/ReactNativeJS: Possible Unhandled Promise Rejection (id: 9):
    ReferenceError: Can't find variable: Permissions
    _callee$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141092:62
    tryCatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23066:23
    invoke@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23241:32
    tryCatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23066:23
    invoke@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23142:30
    http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23172:19
    tryCallTwo@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24367:9
    doResolve@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24531:25
    Promise@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24390:14
    callInvokeWithMethodAndArg@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23171:29
    enqueue@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23176:157
    async@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23192:69
    _callee@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141087:42
    _callee2$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141135:40
    tryCatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23066:23
    invoke@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23241:32
    tryCatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23066:23
    invoke@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23142:30
    http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23172:19
    tryCallTwo@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24367:9
    doResolve@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24531:25
    Promise@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24390:14
    callInvokeWithMethodAndArg@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23171:29
    enqueue@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23176:157
    async@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23192:69
    _callee2@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141131:42
    onPress@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141451:39
    touchableHandlePress@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:51687:47
    touchableHandlePress@[native code]
    _performSideEffectsForTransition@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:50367:36
    _performSideEffectsForTransition@[native code]
    _receiveSignal@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:50293:46
    _receiveSignal@[native code]
    touchableHandleResponderRelease@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:50172:26
    touchableHandleResponderRelease@[native code]
    invokeGuardedCallbackImpl@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8533:21
    invokeGuardedCallback@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8624:42
    invokeGuardedCallbackAndCatchFirstError@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8628:36
    executeDispatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8822:48
    executeDispatchesInOrder@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8842:26
    executeDispatchesAndRelease@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8937:35
    forEach@[native code]
    forEachAccumulated@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8927:22
    runEventsInBatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:9031:27
    runExtractedEventsInBatch@http://10.0.2.2:8081/index.delta?platform=android&dev=
W/ReactNativeJS: Possible Unhandled Promise Rejection (id: 10):
    ReferenceError: Can't find variable: ImagePicker
    _callee2$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141138:62
    tryCatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23066:23
    invoke@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23241:32
    tryCatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23066:23
    invoke@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23142:30
    http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23172:19
    tryCallTwo@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24367:9
    doResolve@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24531:25
    Promise@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:24390:14
    callInvokeWithMethodAndArg@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23171:29
    enqueue@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23176:157
    async@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:23192:69
    _callee2@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141131:42
    onPress@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141451:39
    touchableHandlePress@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:51687:47
    touchableHandlePress@[native code]
    _performSideEffectsForTransition@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:50367:36
    _performSideEffectsForTransition@[native code]
    _receiveSignal@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:50293:46
    _receiveSignal@[native code]
    touchableHandleResponderRelease@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:50172:26
    touchableHandleResponderRelease@[native code]
    invokeGuardedCallbackImpl@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8533:21
    invokeGuardedCallback@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8624:42
    invokeGuardedCallbackAndCatchFirstError@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8628:36
    executeDispatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8822:48
    executeDispatchesInOrder@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8842:26
    executeDispatchesAndRelease@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8937:35
    forEach@[native code]
    forEachAccumulated@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:8927:22
    runEventsInBatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:9031:27
    runExtractedEventsInBatch@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:9038:25
    http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:10005:36
    batchedUpdates$1@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:21211:20
    batchedUpdates@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:9947:37
    _receiveRootNodeIDEvent@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:10004:23
    receiveTouches@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:10034:34
    __callFunction@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:2575:49
    http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:2332:31
    __guard@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:2529:15
    callFunctionReturnFlushedQueue@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:2331:21
    callFunctionReturnFlushedQueue@[native code]

【问题讨论】:

    标签: android react-native react-native-image-picker


    【解决方案1】:

    页面上没有导入权限的模块。为页面添加权限模块。 React-native 具有默认权限的模块。

    查看here获取权限

    例子

    import {PermissionsAndroid} from 'react-native';
    
    async function requestCameraPermission() {
      try {
        const granted = await PermissionsAndroid.request(
          PermissionsAndroid.PERMISSIONS.CAMERA,
          {
            title: 'Cool Photo App Camera Permission',
            message:
              'Cool Photo App needs access to your camera ' +
              'so you can take awesome pictures.',
            buttonNeutral: 'Ask Me Later',
            buttonNegative: 'Cancel',
            buttonPositive: 'OK',
          },
        );
        if (granted === PermissionsAndroid.RESULTS.GRANTED) {
          console.log('You can use the camera');
        } else {
          console.log('Camera permission denied');
        }
      } catch (err) {
        console.warn(err);
      }
    }
    

    【讨论】:

    • 我能够通过使用以下导入来解决该问题: import * as Permissions from 'expo-permissions';从'expo-image-picker'导入*作为ImagePicker;但是现在,我遇到了这个问题:``` W/ReactNativeJS:可能的未处理承诺拒绝(id:3):TypeError:未定义不是对象(评估'_ExpoPermissions.default.askAsync')和W/ReactNativeJS:可能未处理的 Promise Rejection (id: 4): TypeError: undefined is not an object (evalating '_ExponentImagePicker.default.launchCameraAsync') ```
    • 您使用的是 EXO 版本,而不是 React-native?
    • 你的 Expo 版本是什么?
    • 嗨。这是错误的链接:stackoverflow.com/questions/56691470/…
    猜你喜欢
    • 2014-02-20
    • 2018-04-24
    • 2016-10-30
    • 2012-03-18
    • 2015-11-16
    • 2011-05-22
    • 2014-12-16
    • 2022-01-23
    • 2019-09-16
    相关资源
    最近更新 更多