W / ReactNativeJS: Возможный необработанный отказ от обещания (id: 3 И 4) - PullRequest
1 голос
/ 20 июня 2019

Я недавно удалил свой реактивный проект, и функция камеры не работает.Код позволяет пользователям загружать изображения.Он работает с экспо, но после извлечения и запуска с Android, он перестал работать.Это код для загрузки камеры:

import * as Permissions from 'expo-permissions';
import * as ImagePicker from 'expo-image-picker';

    _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
            });

        }
    };

Тем не менее, я получаю эту ошибку:

W/ReactNativeJS: Possible Unhandled Promise Rejection (id: 3):
    TypeError: undefined is not an object (evaluating '_ExpoPermissions.default.askAsync')
    askAsync$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:172905:109
    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
    askAsync@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:172896:38
    _callee$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141098:71
    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:141093:42
    _callee2$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141141: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:141137:42
    onPress@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141457: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]
    _rec
W/ReactNativeJS: Possible Unhandled Promise Rejection (id: 4):
    TypeError: undefined is not an object (evaluating '_ExponentImagePicker.default.launchCameraAsync')
    launchCameraAsync$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:173085:45
    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
    launchCameraAsync@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:173079:38
    _callee2$@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141144:80
    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:141137:42
    onPress@http://10.0.2.2:8081/index.delta?platform=android&dev=true&minify=false:141457: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
    runExtrac

В моем приложении есть кнопка загрузки, и когда я нажимаю на нее, это сообщение об ошибкепоявляется в консоли Android Studio.Он работал нормально с Expo.

Вот мой пакет. Json:

{
  "scripts": {
    "start": "react-native start",
    "android": "react-native run-android",
    "ios": "react-native run-ios",
    "web": "expo start --web"
  },
  "dependencies": {
    "@expo/samples": "~3.0.0",
    "@expo/vector-icons": "^10.0.2",
    "@unimodules/core": "^2.0.1",
    "@unimodules/react-native-adapter": "^2.0.1",
    "expo-asset": "^5.0.0",
    "expo-constants": "^5.0.0",
    "expo-file-system": "^5.0.1",
    "expo-font": "^5.0.0",
    "expo-image-picker": "^5.0.2",
    "expo-permissions": "^5.0.1",
    "expo-web-browser": "^5.0.0",
    "firebase": "^6.1.1",
    "react": "16.8.3",
    "react-dom": "^16.8.6",
    "react-native": "0.59.8",
    "react-native-elements": "^1.1.0",
    "react-native-gesture-handler": "^1.3.0",
    "react-native-paper": "^2.16.0",
    "react-native-permissions": "^1.1.1",
    "react-native-vector-icons": "^6.5.0",
    "react-native-web": "^0.11.4",
    "react-navigation": "^3.11.0",
    "react-navigation-material-bottom-tabs": "^1.0.0",
    "remove-node-modules": "^1.7.4"
  },
  "devDependencies": {
    "babel-preset-expo": "^5.1.0"
  },
  "private": true
}

1 Ответ

0 голосов
/ 21 июня 2019

Если вы выводите React-native project, а не Expo,

Вы должны использовать React-native-unimodules вместо самостоятельной установки модулей.

npm install react-native-unimodules

Эта библиотека содержит базовую инфраструктуру Unimodule и коллекцию Unimodules и интерфейсов, которые обычно зависят от других Unimodules. Вам нужно будет установить это перед использованием библиотек из Foundation, таких как expo-камера, expo-media-library и другие.

Настройка Android

  • В верхней части android / settings.gradle добавьте команду apply из: '../node_modules/react-native-unimodules/gradle.groovy' и затем включите в следующей строке добавьте includeUnimodulesProjects ().
  • Добавить заявку от: '../../node_modules/react-native-unimodules/gradle.groovy' где угодно в android / app / build.gradle и затем добавьте UnimodulesDependencies () блок внутренних зависимостей {}.
  • Если вам нужно настроить путь к node_modules, например потому что вы используете рабочие области пряжи, то вы можете передать в параметре modulesPaths для обеих этих функций: includeUnimodulesProjects ([modulesPaths: [»./path/to/node_modules']]), addUnimodulesDependencies ([modulesPaths: ['./path/to/node_modules']])
  • Если вам нужно исключить некоторые из модулей, которые вы не используете но они были установлены другими вашими зависимостями (например, expo), затем Вы можете передать исключить параметр для этого. Например, если вы хотите исключите expo-face-detector, вы можете использовать это: addUnimodulesDependencies ([исключить: ['экспо-лицо-детектор']])
  • Вы также можете настроить конфигурацию unimodules зависимости (по умолчанию это реализация, если вы используете Gradle старше 3.0 вам нужно будет установить конфигурацию: "compile" в addUnimodulesDependencies, например: addUnimodulesDependencies ([конфигурация: "компилировать"]))
  • Мы рекомендуем использовать Java 1.8, вы можете установить это в android / app / build.gradle вот так.
  • Обновление minSdkVersion в Android / build.gradle до 21.
  • Обновите файл MainApplication.java в соответствии с этой разницей.

Добавить разрешения для AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />

Возможно, вам не придется использовать какой-либо код, предоставленный этим пакетом напрямую, он может использоваться только другими установленными вами Unimodules.

Но вполне вероятно, что вы захотите использовать что-то вроде FileSystem или Permissions, и для этого вы можете импортировать следующие модули следующим образом:

import {
  Asset,
  Constants,
  FileSystem,
  Permissions,
} from 'react-native-unimodules';

Если вы хотите узнать больше об этом,

...