如何解决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 代码正在运行并且正在插入新记录,但是如何从 PHP 接收 JSON 对象作为对 Kotlin 的回答而不会出现此错误?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。