react-native - 尝试在反应本机的空对象引用上调用虚拟方法“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,
},
});