读取mysql blob字段并转换为android webservice的json

6g8kf2rb  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(444)

我正在为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
欢迎任何帮助。谢谢您

xxhby3vn

xxhby3vn1#

我自己回答,因为经过多次尝试,我找到了一个可以接受的解决办法。错误在sql语句中,该语句必须预先转换为一组字符,在本例中为拉丁1。它看起来是这样的:

$res=$dbh->query("select CONVERT(CAST(mensaje as BINARY) USING latin1) as mensa from ges_mensajes where cod_destino=4;");

json返回的内容可以识别html字符和标记。现在只剩下用webview来阅读android上的webservice了,比如,它可以识别base64中的奇怪字符和图像。

相关问题