AndroidアプリケーションのRESTサービスを作成しようとしています。外部データベースは、アプリケーションのローカルデータベースに格納されるアイテムを返します。blobがnullとして返されることを除いて、すべてが機能しています。 。
これは私のジェイソンの応答の例です(画像とサムネイルのフィールドはblobです)
{"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);
?>
この問題の解決策を知っている人はいますか?私はこれを最も効率的な方法(ファイルシステムに画像を保存する方が良い)ではないことを知っていますが、これが機能する必要があります。
JSONを生成する前に、バイナリデータをbase64としてエンコードします。
$obj->picture = base64_encode($binaryData);
次に、これをAndroidアプリケーションで任意のbase64デコーダーを使用してデコードできます。APIレベル8以降、組み込みの til class があります。それ以外の場合は、外部ライブラリがたくさんあります。 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エラーを検出できます。