2017-11-22 3 views
0

Ich benutze den Basiscode von here, um die Kamera zu arbeiten. Der einzige Unterschied ist, dass ich keine Standalone-Kamera-App gemacht habe, sondern den Code in andere App implementiere (Öffnen der Kamera über die Taste in der App)Expo reagieren native Kamera hat nicht funktioniert

Ich befolge den Code genau, aber die Kamera würde das Bild nicht aufnehmen und speichern es. Es gibt sogar eine Warnung sagen

[Unhandled Promise rejection: Error: TypeError: expected dynamic type `string', but had type `object'] 

ich den Code erneut prüfen, und ich bin ziemlich sicher, dass es von diesem Teil kam

takePicture = async function() { 
if (this.camera) { 
    this.camera.takePictureAsync().then(data => { 
    FileSystem.moveAsync({ 
     from: data, 
     to: `${FileSystem.documentDirectory}photos/Photo_${this.state.photoId}.jpg`, 
    }).then(() => { 
     this.setState({ 
     photoId: this.state.photoId + 1, 
     }); 
     Vibration.vibrate(); 
    }); 
    }); 
} 
    }; 

Der Druckknopf hat das Bild nicht nehmen.

Ich habe ein Konsolenprotokoll und gefunden takePictureAsync()

if (this.camera) { 
    this.camera.takePictureAsync().then(data => console.log(data)); 
} 

für den folgend und das ist das Ergebnis

Object { 
    "height": 1920, 
    "uri":"file:///data/user/0/host.exp.exponent/cache/ExperienceData/%2540lily%252Fmotion/Camera/e501458d-f081-47b5-b7ac-6742f8e8d61e.jpg", 
    "width": 1080, 
} 

Ist das, warum heißt es in der Warnung expected dynamic type 'string', but had type 'object']? und möglicher Grund, warum die App das Bild nicht aufgenommen hat?

Wenn ja, wie soll ich das beheben?

Vielen Dank für Ihre Hilfe.

Mein package.json

"expo": "^22.0.4", 
"native-base": "^2.3.3", 
"react": "16.0.0-beta.5", 
"react-native": "https://github.com/expo/react-native/archive/sdk-22.0.1.tar.gz" 
+0

können Sie den Code der Funktion Post, wo Sie das Protokoll gedruckt? –

+0

@Ishita Sinha bitte beziehen Sie sich auf meine Frage. Ich habe es bearbeitet, um den Code zu zeigen, den ich verwendete, um das Protokoll zu drucken – Ling

+0

Verwenden Sie 'from: data.uri' anstelle von' from: data'. Das ist alles. –

Antwort

0

Es sieht aus wie Sie ein Bild machen haben! Jetzt müssen Sie nur es irgendwo zu retten ...

FileSystem.moveAsync({ 
     from: data, 
     to: `${FileSystem.documentDirectory}photos/Photo_${this.state.photoId}.jpg`, 
    }).then(() => { 
     this.setState({ 
     photoId: this.state.photoId + 1, 
     }); 
     Vibration.vibrate(); 
    }); 

Der Code, den Sie zur Verfügung gestellt wird, um die FileSystem mit Ihrem Foto lokal innerhalb der Anwendung zu speichern. Ihr Foto wird auf etwa wie folgt gespeichert werden: {documentsDirectory}/photos/Photo_{0}.jpg


Wenn Sie möchten, dass Ihr Bild in der Filmrolle speichern Sie die Mutter CameraRoll API Reagieren verwenden soll.

würden Sie die statische Methode await CameraRoll.saveToCameraRoll(photoUri)

+0

ok, ich denke, ich verstehe den Teil 'Speichern Sie das Foto lokal in der Anwendung ', aber wenn ich in der Anwendung überprüfe, wird dort kein Bild lokal gespeichert. Ich verstehe, dass es nur eine Warnung ist, aber könnte es sein, dass es einen anderen Teil gibt, den ich vermisst habe? Ich betreibe die App hauptsächlich auf Android – Ling

Verwandte Themen