0

Web サーバーから画像を取得するアプリケーションに取り組んでいます。

その画像を sqlite データベースに保存する必要があります。多分それはaに保存されbyte[]ます; 私はこのようにして、データ型を としてblob取得し、db から画像を取得して imageview に表示しました。

ただし、どこかで立ち往生しています:nullbytearrayからデコードすると取得されます

私が使用したコードは次のとおりです。

InputStream is = null;
try {
    URL url = null;                              
    url = new URL(http://....);
    URLConnection ucon = null;
    ucon = url.openConnection();    
    is = ucon.getInputStream();
} catch (MalformedURLException e1) {                                    
    e1.printStackTrace();
} catch (IOException e1) {                                  
    e1.printStackTrace();
}

BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer barb = new ByteArrayBuffer(128);
int current = 0;
try {
    while ((current = bis.read()) != -1) {
    barb.append((byte) current);
} catch (IOException e) {                                   
    e.printStackTrace();
}

byte[] imageData = barb.toByteArray();

次に、imageData をデータベースに挿入しました。

画像を取得するには:

byte[] logo = c.getBlob(c.getColumnIndex("Logo_Image"));
Bitmap bitmap = BitmapFactory.decodeByteArray(logo, 0, logo.length);
img.setImageBitmap(bitmap);

しかし、私はエラーが発生しています:

ビットマップ ビットマップがヌルになっています。

4

1 に答える 1

0

データベースから blob 型として取得した後、byte[] が正しくデコードされない場合があります。

だから、あなたはこのようにすることができます、エンコード - デコード

データベースに書き込む前に画像をエンコードします。

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
mBitmap.compress(Bitmap.CompressFormat.JPEG, THUMB_QUALITY, outputStream);
mByteArray = outputStream.toByteArray();  // write this to database as blob

そして、カーソルからのようにデコードします。

ByteArrayInputStream inputStream = new ByteArrayInputStream(cursor.getBlob(columnIndex));
Bitmap mBitmap = BitmapFactory.decodeStream(inputStream);

また、これがうまくいかない場合は、実行可能な方法をお勧めします..

  • アプリケーション イメージ用の外部/内部ストレージにディレクトリを作成します。
  • そのディレクトリに画像を保存します。
  • これらの画像ファイルのパスをデータベースに保存します。したがって、画像のエンコードとデコードに問題はありません。
于 2012-06-30T10:36:19.337 に答える