我正在尝试为 IOS 开发一个条形码扫描仪应用程序,现在我已经设法创建一个可以从条形码读取数据的扫描仪,但不仅仅是读取数据,我还想将数据存储到数据库中,我已经探索了一些另一边的源代码是我的代码。
扫描仪.js
这是已经可以从条形码读取数据的扫描仪源
import React, { useState, useEffect,Component,onMount} from 'react';
import { Text,TextInput, View, StyleSheet, Button } from 'react-native';
import { BarCodeScanner } from 'expo-barcode-scanner';
import {useNavigation} from'@react-navigation/native';
import {StatusBar} from 'expo-status-bar';
export default function Scanner () {
const [hasPermission, setHasPermission] = useState(null);
const [scanned, setScanned] = useState(false);
const [userid, setText] = useState('Not yet scanned')
const [currentDate, setCurrentDate] = useState('');
const navigation = useNavigation();
const askForCameraPermission = () => {
(async () => {
const { status } = await BarCodeScanner.requestPermissionsAsync();
setHasPermission(status === 'granted');
})()
}
// Request Camera Permission
useEffect(() => {
askForCameraPermission();
}, []);
useEffect(() => {
var date = new Date().getDate(); //Current Date
var month = new Date().getMonth() + 1; //Current Month
var year = new Date().getFullYear(); //Current Year
var hours = new Date().getHours(); //Current Hours
var min = new Date().getMinutes(); //Current Minutes
var sec = new Date().getSeconds(); //Current Seconds
setCurrentDate(
date + '/' + month + '/' + year
+ ' ' + hours + ':' + min + ':' + sec
);
}, []);
// What happens when we scan the bar code
const handleBarCodeScanned = ({ type, data }) => {
setScanned(true);
setText(data )
};
// Check permissions and return the screens
if (hasPermission === null) {
return (
<View style={styles.container}>
<Text>Requesting for camera permission</Text>
</View>)
}
if (hasPermission === false) {
return (
<View style={styles.container}>
<Text style={{ margin: 10 }}>No access to camera</Text>
<Button title={'Allow Camera'} onPress={() => askForCameraPermission()} />
</View>)
}
// Return the View
return (
<View style={styles.container}>
<View style={styles.barcodebox}>
<BarCodeScanner
onBarCodeScanned={scanned ? undefined : handleBarCodeScanned}
style={{ height: 400, width: 400 }} />
</View>
<Text style={styles.maintext}>{userid + '\n'+currentDate}
</Text>
{
scanned && <Button title={'Scan again?'} onPress={() => setScanned(false)} color='tomato' />
}
{
scanned && <Button title={'OK'} onPress={()=> navigation.navigate('Home',{userid})} />
}
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
maintext: {
fontSize: 16,
margin: 20,
},
barcodebox: {
alignItems: 'center',
justifyContent: 'center',
height: 300,
width: 300,
overflow: 'hidden',
borderRadius: 30,
backgroundColor: 'tomato'
}
});
在我探索了将数据发送到后端的方法之后,它需要这种代码,但是我如何将此代码实现到我的scanner.js中?希望大家帮忙谢谢
export default class Scanner extends Component {
constructor(props) {
super(props);
this.state = {userid: ''};
}
Register = () => {
let userid = this.state.userid;
let InsertAPIURL = "http://localhost/api/insert.php";
let headers = {
'Accept': 'application/json',
'Content-Type': 'application/json'
};
let Data = {
userid: userid,
};
fetch(InsertAPIURL, {
method: 'POST',
headers: headers,
body: JSON.stringify(Data)
})
.then((response) =>response.json())
.then((response)=>{
alert(response[0].Message);
})
.catch((error) => {
alert("Error"+error);
})
}
} Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
在我尝试在scanner.js中实现它之后就OK了
import React, { useState, useEffect,Component,onMount} from 'react'; import { Text,TextInput, View, StyleSheet, Button } from 'react-native'; import { BarCodeScanner } from 'expo-barcode-scanner'; import {useNavigation} from'@react-navigation/native'; import {StatusBar} from 'expo-status-bar'; export default function Scanner () { const [hasPermission, setHasPermission] = useState(null); const [scanned, setScanned] = useState(false); const [userid, setText] = useState('Not yet scanned') const [currentDate, setCurrentDate] = useState(''); const navigation = useNavigation(); const askForCameraPermission = () => { (async () => { const { status } = await BarCodeScanner.requestPermissionsAsync(); setHasPermission(status === 'granted'); })() } // Request Camera Permission useEffect(() => { askForCameraPermission(); }, []); useEffect(() => { var date = new Date().getDate(); //Current Date var month = new Date().getMonth() + 1; //Current Month var year = new Date().getFullYear(); //Current Year var hours = new Date().getHours(); //Current Hours var min = new Date().getMinutes(); //Current Minutes var sec = new Date().getSeconds(); //Current Seconds setCurrentDate( date + '/' + month + '/' + year + ' ' + hours + ':' + min + ':' + sec ); }, []); // What happens when we scan the bar code const handleBarCodeScanned = ({ type, data }) => { setScanned(true); setText(data ) }; Register = () => { this.state={ userid:'' }; let userid = this.state.userid; let InsertAPIURL = "https://127.0.0.1/api/insert.php"; let headers = { 'Accept': 'application/json', 'Content-Type': 'application/json' }; let Data = { userid: userid, }; fetch(InsertAPIURL, { method: 'POST', headers: headers, body: JSON.stringify(Data) }) .then((response) =>response.json()) .then((response)=>{ alert(response[0].Message); }) .catch((error) => { alert("Eror"+error); }) } // Check permissions and return the screens if (hasPermission === null) { return (Requesting for camera permission )
}
if (hasPermission === false) {
return (
No access to camera )
}
// Return the View
return (
{userid + '\n'+currentDate}
{
scanned &&
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
alignItems: 'center',
justifyContent: 'center',
},
maintext: {
fontSize: 16,
margin: 20,
},
barcodebox: {
alignItems: 'center',
justifyContent: 'center',
height: 300,
width: 300,
overflow: 'hidden',
borderRadius: 30,
backgroundColor: 'tomato'
}
});插入.php
$Message); echo json_encode($Response); ?>我扫描条形码并单击“确定”按钮后显示错误 类型错误:网络请求失败