在颤振中,我使用了一个 php 文件,该文件从 db 查询返回一个 json 响应,但是当我尝试解码 json 时,我收到此错误:
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): ^
Run Code Online (Sandbox Code Playgroud)
这是我的飞镖功能:
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);
}
Run Code Online (Sandbox Code Playgroud)
和我的 php 文件中的代码:
<?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);
}}
?>
Run Code Online (Sandbox Code Playgroud)
我正在使用 HTTP dart 依赖
cod*_*shi 10
用以下代码解决这个问题。有关更多信息,请参阅此处。
var pdfText= await json.decode(json.encode(response.databody);
Run Code Online (Sandbox Code Playgroud)
如果您使用 Dio 并遇到此类错误,请添加:
responseType: ResponseType.plain,
Run Code Online (Sandbox Code Playgroud)
到你的 dio 客户端。完整的dio客户端如下:
final Dio _dio = Dio(BaseOptions(
connectTimeout: 10000,
receiveTimeout: 10000,
baseUrl: ApiEndPoints.baseURL,
contentType: 'application/json',
responseType: ResponseType.plain,
headers: {
HttpHeaders.authorizationHeader:'Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjQxNTU5MzYzLCJqdGkiOiJlOTBiZjIyYjI5YTg0YmRhYWNlZmIxZTY0Y2M2OTk1YyIsInVzZXJfaWQiOjF9.aDQzoYRawmXUCLxzEW8mb4e9OcR4L8YhcyjQIaBFUxk'
},
Run Code Online (Sandbox Code Playgroud)
) )
最后我使用laravel解决了这个问题,以这种方式返回数据
return response()->json($yourData, 200, ['Content-Type' => 'application/json;charset=UTF-8', 'Charset' => 'utf-8'],
JSON_UNESCAPED_UNICODE
Run Code Online (Sandbox Code Playgroud)
我注意到此错误仅发生在模拟器中,而不会发生在物理设备中。