我正在为android创建一个webservice,其中我必须从mysql数据库中读取blob字段。问题是我无法将该字段编码为json,这是我稍后阅读android webservice时需要的格式。
看看有没有人知道我做错了什么。这是我的php Web服务:
<?php
require('../../conect/conect.php');
$dbh -> exec("set names utf8");
$res=$dbh->query("select cast(mensaje as char(10000) character set utf8) mensa from ges_mensajes where cod_destino=4;");
$datos = array();
foreach ($res as $row) {
$datos[] = $row;
}
//print_r($datos); //Si ejecuto esta línea me sale bien por pantalla
echo json_encode($datos);
?>
我试着把它投给char,但没有投给char。。。事实上,如果我用print\r打印,我会得到屏幕上的数据,但是当我将其编码为json时,我什么也得不到。
这就是我从android上读到的:
public void ObtMensaje_volley(){
ArrayList<String> mensaje = new ArrayList<>();
String url = "https://local.es/WS_neton/obt_mensaje_blob.php";
StringRequest eventfulRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
try {
JSONArray jsonArray = new JSONArray(response);
String mensajeM;
for (int i=0; i<jsonArray.length(); i++){
mensajeM = jsonArray.getJSONObject(i).getString("mensa");
mensaje.add(mensajeM);
//Toast.makeText(getApplicationContext(), "mensaje: "+String.valueOf(mensajeM), Toast.LENGTH_SHORT).show();
}
} catch (Exception e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
//Log.e("Error: ", error.toString());
}
});
VolleySingleton.getInstance(this)
.addToRequestQueue(eventfulRequest);
}
android返回此错误:
w/system.err:org.json.jsonexception:第0个字符处的输入结束
但是我不知道这个问题是来自于webservice还是android
欢迎任何帮助。谢谢您
1条答案
按热度按时间xxhby3vn1#
我自己回答,因为经过多次尝试,我找到了一个可以接受的解决办法。错误在sql语句中,该语句必须预先转换为一组字符,在本例中为拉丁1。它看起来是这样的:
json返回的内容可以识别html字符和标记。现在只剩下用webview来阅读android上的webservice了,比如,它可以识别base64中的奇怪字符和图像。