Heim  >  Fragen und Antworten  >  Hauptteil

So übergeben Sie Daten an das Backend in React Native

Ich versuche, eine Barcode-Scanner-App für IOS zu entwickeln, jetzt habe ich es geschafft, einen Scanner zu erstellen, der Daten aus Barcodes lesen kann, aber nicht nur die Daten liest, ich möchte die Daten auch in einer Datenbank speichern, ich habe After Das Erforschen eines Teils des Quellcodes auf der anderen Seite ist mein Code.

scanner.js

Hier ist die Quelle eines Scanners, der bereits Daten aus Barcodes lesen kann

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

Nachdem ich Möglichkeiten zum Senden von Daten an das Backend untersucht habe, ist diese Art von Code erforderlich. Aber wie kann ich diesen Code in meine scanner.js implementieren? Ich hoffe, jeder kann helfen, danke

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粉878542459P粉878542459204 Tage vor332

Antworte allen(1)Ich werde antworten

  • P粉770375450

    P粉7703754502024-03-30 08:00:07

    在我尝试在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
            

    插入.php

     $Message);
        echo json_encode($Response);
    ?>

    我扫描条形码并单击“确定”按钮后显示错误 类型错误:网络请求失败

    Antwort
    0
  • StornierenAntwort