首页 > 解决方案 > 尝试在反应本机的空对象引用上调用虚拟方法“int android.graphics.bitmap.getwidth()”

问题描述

我正在尝试从图库中扫描二维码,因此我使用“react-native-qr-decode-image-camera”进行扫描,并使用“react-native-document-picker”来选择图像。图像被成功挑选,但是当我尝试扫描它时会引发错误:

'尝试在空对象引用上调用虚拟方法'int android.graphics.bitmap.getwidth()'

代码 :

import React from "react";
import { View, StyleSheet, Text, Modal, TouchableOpacity, PermissionsAndroid } from "react-native";
import { RNCamera } from "react-native-camera";
import Theme from "../constants/Theme";
import DocumentPicker from "react-native-document-picker";
import Icon from "react-native-vector-icons/MaterialCommunityIcons";
import { QRreader } from "react-native-qr-decode-image-camera";

const QrScanner = (props) => {
 const requestStoragePermission = async () => {
 try {
   const granted = await PermissionsAndroid.request(
     PermissionsAndroid.PERMISSIONS.READ_EXTERNAL_STORAGE,
   );
   if (granted === PermissionsAndroid.RESULTS.GRANTED) {
     return "allow";
   }
   if (granted === PermissionsAndroid.RESULTS.DENIED) {
     return "denied";
   }
   if (granted === PermissionsAndroid.RESULTS.NEVER_ASK_AGAIN) {
     return "never ask again";
   }
   return "disallow";
 } catch (err) {
   return err;
 }
};
 const selectFromGallery = async () => {
   let result = await requestStoragePermission();
   if (result === "allow") {
     try {
       await DocumentPicker.pick({
         type: [DocumentPicker.types.images],
       })
         .then((result) => {
           if (!result.cancelled) {
             const { height, width, type, uri } = result;
             scanImage(uri);
           }
         })
         .catch((error) => {
           throw error;
         });
     } catch (err) {}
   }
 };

 const scanImage = (uri) => {
   QRreader(uri)
     .then((data) => {
       console.log("DATA", data);
     })
     .catch((err) => {
       console.log("ERROR", err);
     });
 };

 return (
       <TouchableOpacity onPress={selectFromGallery} style={styles.scanButton}>
         <Icon
           name={"image-multiple"}
           size={Theme.iconSize.iconS}
           color={Theme.colors.white}
           style={styles.galleryIcon}
         />
         <Text style={styles.scanText}>Scan from gallery</Text>
       </TouchableOpacity>
 );
};

export default QrScanner;

const styles = StyleSheet.create({
 scanButton: {
   position: "absolute",
   alignSelf: "center",
   bottom: 100,
   flexDirection: "row",
 },
 scanText: {
   color: "white",
   fontSize: Theme.fontSize.textInput,
   textDecorationLine: "underline",
 },
 galleryIcon: {
   marginRight: Theme.margin.margin,
 },
});

标签: react-nativenpmqr-code

解决方案


推荐阅读