AndroidからJSONで送ったバイナリデータを
サーブレットで受け取って、
MySQLにMediumBlob型で保存します。
それをMySQLからサーブレットで取得してJSONで送信し、
Android側でBitmapに変換して表示させる
といった処理を行いたいです。
現状は、
Android側でBitmap → byte[] に変換して
JSONの値として送信はできております。
([B@✕✕✕✕✕✕✕✕といった形です)
また、それをサーブレットで
Stringで取得 → ByteArrayInputStreamに変換
MySQLのMediumBlob型のデータに挿入もできております。
([B@✕✕✕✕✕✕✕✕といった形です)
AndroidでサーバーからJSONで取得した値は
byte[]は[B@✕✕✕✕✕✕✕✕という形で表示はされますが、
Bitmapはnullになってしまっております。
ここで一つ気になっていることが、
MediumBlob型に
[B@✕✕✕✕✕✕✕✕
という形で登録されていていいのかということです。
その値をJSPで
Java
1response.setContentType("image/png"); 2 BufferedImage img = (BufferedImage) photo; 3 OutputStream os = response.getOutputStream(); 4 try{ 5 ImageIO.write(img , "png" , os); 6 }catch(IOException e){ 7 e.printStackTrace(); 8 } 9 os.flush();
といった具合に表示をさせようと思っても
画像として表示されません。
データ型の変換という部分で
おかしな点がございましたら、
お力添えのほど、よろしくお願い致します。
【訂正】
Android側から送られてきたJSONをサーブレットで受信して
画像データ(byte[])を取得するときに
Stringとしてその後、byte[]に変換していましたが、
それですとおかしなことになりますね。
すみません。
なので、はじめから、byte[]で取得すべく、
java
1BufferedReader bufferReaderBody = new BufferedReader(request.getReader()); 2 String body = bufferReaderBody.readLine(); 3 4 JSONObject jsonObject = JSONObject.fromObject(body); 5 byte[] binaryData = (byte[])jsonObject.get("image1");
としましたが、
Java
1"image1":"[B@✕✕✕✕✕✕✕✕"
という形式で表記されているため、
java
1 byte[] binaryData = (byte[])jsonObject.get("image1");
の段階で
java
1java.lang.String cannot be cast to [B
というエラーがでてしまいます。
[Bがbyte[]にキャストできないのは、わかるのですが、
それを回避して、
byte[]として値を取得する方法はありますでしょうか?
何卒、よろしくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。