I'm trying to develop a barcode scanner app for IOS, now I have managed to create a scanner that can read data from barcodes, but not just reading the data, I also want to store the data into a database, I've explored some of the source code on the other side of my code.
Scanner.js
This is a scanner source that can already read data from barcodes
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' } });
After I explored ways to send data to the backend, it requires this kind of code, but how do I implement this code into my scanner.js? Hope everyone can help, thank you
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); }) } }
P粉7703754502024-03-30 08:00:07
It was OK after I tried to implement it in scanner.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 ) }; 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 () } if (hasPermission === false) { return ( Requesting for camera permission ) } // Return the View return ( No access to camera ); } 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' } }); {userid + '\n'+currentDate} { scanned &&
Insert.php
$Message); echo json_encode($Response); ?>
The error appears after I scan the barcode and click the "OK" button Type error: Network request failed