0

いくつかの画像をlongblobリモートのMySQLデータベースにsとして保存していて、Androidアプリケーション用にそれらを取得して、として表示する必要がありますBitmap。Androidアプリケーションとの間でSQLクエリを解析するためのPHPスクリプトを設定しています。

私が試したこと:longblobフィールド の下にある文字列を取得して、それを使用しようとgetBytes()しました。しかし、どうやら、それは機能していません。文字列を表示すると、膨大な数の文字(読み取り可能および読み取り不可能)が表示されます。したがって、問題は文字列からbyte[](私が思うに)へのエンコードまたは変換にあります。

StringBuilder strStream = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(httpEntity.getContent()), 8);

String line = null;
while((line = reader.readLine()) != null) strStream.append(line);

Bitmap bitmap = BitmapFactory.decodeByteArray(strStream.toString().getBytes(), 0, strStream.length());

必要なもの:カスタムPHPスクリプトを使用してAndroidから接続するデータベースに保存されてBitmapいるリモートからを作成する方法はありますか?スクリプトが正しく機能していて、コードが変数に対して100%機能していることを完全に確信しています。とその正しい値を取得することもできます。唯一の問題は、を取得できないことです。longblobMySQLhttpEntityStringBitmap

ありがとう。

4

1 に答える 1

1

シンプルであるほど良い :) PHP はデータベースから blob を出力できます

header('Content-Type: image/png');
echo $result['blob'];

Web ブラウザーでこのスクリプトを要求すると、PNG 画像が表示されます。次にAndroid部分

InputStream in = new URL("http://img.io/read.php").openStream();
Bitmap bmp = BitmapFactory.decodeStream(in);
in.close();

ここで文字列を渡す必要はありません... Java の文字列は単なるバイト配列ではありません。それらはセマンティクスを運ぶため、バイト配列は常にエンコード方式 (デフォルトは UTF-16LE) と結合されます。

于 2012-09-24T18:15:27.133 に答える