Dans Flutter, j'utilise un fichier php qui renvoie une réponse json à partir d'une requête db, mais quand j'essaye de décoder json j'obtiens cette erreur:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
include_once "Clases/conexion.php";
$usuario = $_POST['usuario'];
$password = $_POST['password'];
$consulta = "select usu_nombre
FROM usu_usuarios
WHERE usu_nusuario='$usuario'and usu_password='$password' and usu_activo='SI'";
$mysql_obj = new Conectar();
$mysqli = $mysql_obj->crearConexion();
if($result = $mysqli->query($consulta)) {
if ($mysqli->affected_rows > 0) {
while($row = $result->fetch_array()) {
$myArray[] = $row;
}
header('Content-type: application/json');
echo json_encode($myArray);
}else {
header("HTTP/1.0 401 Datos Incorrectos");
header('Content-type: application/json');
$data = array("mensaje" => "Datos Incorrectos");
echo json_encode($data);
}}
?>
Voici ma fonction dart:
Future<String> iniciarSesion() async{
var usuario = textUsuario.text;
var password = textPassword.text;
var nombreUsuario;
var url ="http://192.168.1.37/usuario.php";
//Metodo post
var response = await http.post(
url,
headers:{ "Accept": "application/json" } ,
body: { "usuario": '$usuario',"password": '$password'},
encoding: Encoding.getByName("utf-8")
);
List data = json.decode(response.body);
}
Et le code de mon fichier php:
E/flutter ( 8294): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled
Exception: FormatException: Unexpected character (at character 1)
E/flutter ( 8294): [{"0":"PRUEBA","usu_nombre":"PRUEBA"}]
E/flutter ( 8294): ^
J'utilise la dépendance http dart
p>
4 Réponses :
Je ne sais pas pourquoi vous obtenez le ï »¿ avant votre réponse, mais je pense qu'il attend { comme premier caractère, ce qui n'est pas vrai pour votre scénario. Avez-vous ajouté ï »¿ vous-même ou savez-vous pourquoi cela fait partie de la réponse?
Si vous pouvez le faire répondre {"0": "PRUEBA", "usu_nombre": "PRUEBA"} , vous devriez être en sécurité chez vous.
Pourquoi voulez-vous enregistrer vos données sous forme de liste plutôt que sous forme de chaîne? En l’ayant sous forme de chaîne plutôt que de liste, vous évitez les crochets autour de votre réponse.
Merci pour votre commentaire. Je ne sais pas d'où viennent ces symboles, mais je suis sûr que je ne les ajoute pas à la réponse.
Enfin, je résous le problème en utilisant laravel, en renvoyant les données de cette manière
return response()->json($yourData, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
JSON_UNESCAPED_UNICODE
J'ai remarqué que cette erreur se produit uniquement dans l'émulateur, mais pas dans un appareil physique.
Enfin, je résous le problème en flutter, en demandant les données de cette manière:
Map<String, String> headers = {
'Content-Type': 'application/json;charset=UTF-8',
'Charset': 'utf-8'
};
http.get('localhost:8000/users', headers: headers)
J'ai eu cette erreur sur Android car j'utilisais des connexions http non sécurisées sans configurer l'application android: usesCleartextTraffic = "true" / dans le fichier AndroidManifest.
Salut, j'ai un peu le même problème, avez-vous trouvé ce qui ne va pas et quelle était la solution s'il vous plaît?
@ user2682025 Salut, vérifiez ma réponse ci-dessous s'il vous plaît :)