Я пытаюсь создать службу отдыха для своего приложения для Android, где внешняя база данных возвращает элементы, которые будут храниться в локальной базе данных приложений. У меня есть все, кроме blobs, которые возвращаются как null.
это пример моего ответа Джейсона (картинки и миниатюры – это капли)
{"id":"2","user_id":"1","name":"testing","type":"bouldering","picture":null,"lat":"36","long":"81","alt":"41932","accuracy":"53","thumbnail":null}
Вот мой PHP-скрипт для возврата данных.
<?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); ?>
Кто-нибудь знает о решении этой проблемы? Я знаю, что я не делаю этого наиболее эффективным способом (лучше хранить изображения в файловой системе), но мне нужно, чтобы это работало.
Кодируйте двоичные данные как base64, прежде чем создавать JSON.
$obj->picture = base64_encode($binaryData);
Затем вы можете декодировать это в своем приложении Android с любым базовым 64-декодером. Начиная с уровня API 8, существует встроенный класс util . В противном случае существует множество внешних библиотек, которые вы можете использовать для Android 2.1 или более ранних версий.
вам нужно сделать BLOB для base64_encode
while($spot = $results->fetch_assoc()){ $spots[] = $spot; }
Затем подготовьте петлю foreach как это
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);
Кажется, что json_encode
работает только с кодированными данными UTF-8. Вы можете использовать json_last_error () для обнаружения ошибки json_encode.