2011-06-12 21 views
10

Estoy intentando crear un servicio de descanso para mi aplicación de Android, donde una base de datos externa devuelve elementos para almacenarlos en la base de datos local de las aplicaciones. Tengo todo funcionando, excepto que las manchas se devuelven como nulas.Devolución de un blob con json

Este es un ejemplo de mi respuesta Jason. (Campos de imagen y miniatura son manchas)

{"id":"2","user_id":"1","name":"testing","type":"bouldering","picture":null,"lat":"36","long":"81","alt":"41932","accuracy":"53","thumbnail":null} 

Aquí está mi script php para devolver los datos.

<?php 
require_once('config.php'); 

$mysqli = new mysqli(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME); 
$sql = 'select * from spot_main'; 
$results =$mysqli->query($sql); 

$spots = array(); //array to parse jason from 

while($spot = $results->fetch_assoc()){ 
    $spots[] = $spot;               
} 

echo json_encode($spots); 
?> 

¿Alguien sabe de una solución a este problema? Sé que no estoy haciendo esto de la manera más eficiente (mejor para almacenar imágenes en el sistema de archivos), pero necesito que esto funcione.

+1

Por favor lea la especificación JSON sobre los símbolos permitidos. http://www.json.org/ – excanoe

+0

posible duplicado de [¿Cómo usar BLOB con JSON y PHP?] (http://stackoverflow.com/questions/4855447/how-to-use-blob-with-json- and-php) – bzlm

Respuesta

0

Parece que json_encode funciona solo con datos codificados UTF-8. Puede usar json_last_error() para detectar el error json_encode.

19

Codifique los datos binarios como base64 antes de generar el JSON.

$obj->picture = base64_encode($binaryData); 

Puede decodificar esto en su aplicación Android con cualquier decodificador de base 64. Desde API nivel 8 hay un built in util class. De lo contrario, hay muchas libretas externas que puedes usar para apuntar a Android 2.1 o versiones anteriores.

2

usted tiene que hacer BLOB a base64_encode

while($spot = $results->fetch_assoc()){ 
    $spots[] = $spot;               
    } 

luego preparar un bucle foreach como esto

foreach($spots as $key=>$value){ 
    $newArrData[$key] = $spots[$key]; 
    $newArrData[$key]['picture'] = base64_encode($spots[$key]['picture']); 
    $newArrData[$key]['thumbnail'] = base64_encode($spots[$key]['thumbnail']); 
} 
header('Content-type: application/json'); 
echo json_encode($newArrData); 
Cuestiones relacionadas