php - Volley Kotlin 不会从 PHP 接收 JSON 对象
问题描述
我正在学习使用 volley,目前正在使用 MySQL 数据库和 PHP 文件进行登录和注册表单。我可以从发送包含数据的 JSON 对象的 POST 请求中获取数据,实际上数据已正确插入数据库中。我使用下一个 PHP 代码。
<?php
try {
// Incluímos archivo de la conexión a base de datos
include 'database.php';
// Tomando los datos enviados por json
$json = file_get_contents('php://input');
// Pasando a php
$data = json_decode($json, JSON_UNESCAPED_UNICODE);
// Obtenemos los datos enviados por POST
$nombre = $data['nombre'];
$apellido = $data['apellido'];
$correo = $data['correo'];
$contrasenia = $data['contrasenia'];
$telefono = $data['telefono'];
// Código para buscar si el email está en uso
$sqlCorreoEnUso = "SELECT id FROM usuarios WHERE correo = '{$correo}'";
// Comprobando
$consultaCorreo = mysqli_query($cn, $sqlCorreoEnUso);
if (mysqli_num_rows($consultaCorreo)){
echo json_encode([
'respuesta' => 'error',
'razon' => 'EmailEnUso'
]);
exit;
}
// Código SQL para la consulta de inserción
$sqlInsertarUsuario = "INSERT INTO usuarios(nombre, apellido, correo, contrasenia, telefono) VALUES ('{$nombre}','{$apellido}','{$correo}','{$contrasenia}','{$telefono}')";
// Realizando
if (mysqli_query($cn, $sqlInsertarUsuario)) {
echo json_encode([
'respuesta' => 'ok',
'razon' => 'usuarioInsertado'
]);
}
} catch (Exception $e) {
// Visualizando el error si existe
echo 'Error al procesar';
}
问题是,当我尝试处理使用 PHP 代码中的回显发送的 JSON 对象时,我想获取该 JSON 对象,以便始终根据代码执行时发生的情况获得反馈。当我尝试在 Kotlin 中读取此对象时,总是会收到此错误:
com.android.volley.ParseError: org.json.JSONException: Value <br of type java.lang.String cannot be converted to JSONObject
所以我认为这可能是在 PHP 中使用 echo 的问题,所以我尝试使用 POSTMAN 使用这个文件,它可以工作,我得到一个答案,要么字段 correo 是否已经取值。
使用已采用的 correo 值时:
{"respuesta":"error","razon":"EmailEnUso"}
当使用另一种从未使用过的:
{"respuesta":"ok","razon":"usuarioInsertado"}
这是 Kotlin 代码:
// Cola de peticiones
val queue = Volley.newRequestQueue(this)
// Tomamos los datos
val nombre = etextNombreRegistro.text.toString()
val apellido = etextApellidoRegistro.text.toString()
val correo = etextCorreoRegistro.text.toString()
val contrasenia = etextContraseniaRegistro.text.toString()
// Guardando parámetros en hash para mandarlos como JSON en post
val params = HashMap<String, String>()
params["nombre"] = nombre
params["apellido"] = apellido
params["correo"] = correo
params["contrasenia"] = contrasenia
val jsonObject = JSONObject(params as Map<String, String>)
// Petición con volley
val request = JsonObjectRequest(Request.Method.POST, Urls.ServicioRegistro, jsonObject,
{ response ->
Toast.makeText(this, response.toString(), Toast.LENGTH_LONG).show()
}, { error ->
Toast.makeText(this, "Error: " + error.toString(), Toast.LENGTH_LONG).show()
Log.d("MENSAJE", error.toString())
}
)
// Procesandola
queue.add(request)
为了在 Kotlin 中获取 JSON 对象作为答案,我必须使用另一种方法还是进行另一种解析?正如我所说,实际上 PHP 代码正在工作并且正在插入新记录,但是我如何才能接收 JSON 对象作为从 PHP 到 Kotlin 的答案而不会出现此错误?
解决方案
推荐阅读
- python - python使用super()函数
- c# - 如何使用 Safari 浏览器的 selenium C# 切换到新选项卡
- javascript - 无法初始化 es6 模块中的旋钮
- python - img爬虫AttributeError:'int'对象没有属性'img'python 3.7.6 beautifulsoup4
- flutter - 如何在 Flutter 中将 Header 添加到 GridView?
- python - 计算包含相同字数的句子数
- xamarin.ios - Xamarin iOS 权利未发布
- java - 应用程序终止后如何停止前台服务?
- android - 带有折叠工具栏的Android重叠回收器视图
- c# - 如何在MS WORD c#中填写表格