Считайте поле MySQL blob и конвертируйте его в JSON для Android. - PullRequest
0 голосов
/ 10 декабря 2018

Я создаю веб-сервис для Android, в котором мне нужно прочитать поле blob из базы данных MySQL.Проблема в том, что я не могу зашифровать это поле в JSON, это формат, который мне понадобится позже для чтения веб-сервиса Android.

Давайте посмотрим, если кто-нибудь знает, что я делаю неправильно.Это мой веб-сервис с PHP:

<?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 голосов
/ 11 декабря 2018

Я отвечаю про себя, потому что после многих попыток я нашел приемлемое решение.Ошибка в операторе SQL, который должен быть предварительно приведен к набору символов, в данном случае Latin1.Это будет выглядеть так:

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

То, что возвращает json, может распознавать HTML-символы и теги.Осталось только прочитать веб-сервис на Android с WebView, например, который распознает странные символы и изображения в base64.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...