读取MySQL Blob字段并转换为JSON以用于android webservice

时间:2018-12-10 18:19:19

标签: php android mysql json blob

我正在为Android创建一个Web服务,其中必须从MySQL数据库读取blob字段。问题是我无法将该字段编码为JSON,这是以后读取Android Web服务时需要的格式。

让我们看看是否有人知道我在做什么错。这是我的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而不进行转换……事实是,如果我使用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为

但是我不知道问题是来自网络服务还是来自Android

欢迎任何帮助。 谢谢

1 个答案:

答案 0 :(得分:0)

我对自己说,因为经过多次尝试,我找到了可接受的解决方案。错误出在SQL语句中,该语句必须预先转换为一组字符,在本例中为Latin1。看起来像这样:

$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中的奇怪字符和图像。