0

私は、バイマップをImageViewに設定するライブラリを使用しています。

ライブラリ: https ://github.com/nostra13/Android-Universal-Image-Loader

imageLoader.displayImage(urlString, imageView,  options);

asynctaskを実行し、このビットマップをダウンロードしてimageViewに設定します。問題は、その後、sqliteを使用して保存する必要があることです。

 BitmapDrawable bitmapDrawable = (BitmapDrawable) imageView.getDrawable();
    Bitmap photo = bitmapDrawable.getBitmap();
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    photo.compress(Bitmap.CompressFormat.JPEG, 100, stream);
    byte[] imageInByte = stream.toByteArray();
    db.updateUser(imageInByte);
    db.close();

したがって、imageLoaderがタスクを実行している間、プログラムはダウンロードされたイメージの代わりにデフォルトのイメージを保存します。また、このコードをAsyntask内に配置し、ビットマップをonPostexecute()内に格納してみてください。ライブラリ内でエラーが発生します。

別のライブラリを使用したくないので、ループが適切な場合があります。試してみました。

while (((BitmapDrawable)imageView.getDrawable()).getBitmap() == BitmapFactory.decodeResource(getResources(), R.drawable.ic_stub)) {
Log.d("MyApp", "whileloop");
}

では、画像がダウンロードされて保存されるタイミングを確認するための「待機」/ループを作成するにはどうすればよいですか?

4

1 に答える 1

1

これはそれをしませんか?

imageLoader.loadImage(imageUri, targetSize, displayOptions, new SimpleImageLoadingListener() {
    @Override
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
        ByteArrayOutputStream stream = new ByteArrayOutputStream();
        loadedImage.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] imageInByte = stream.toByteArray();
        db.updateUser(imageInByte);
        db.close();
    }
});
于 2013-02-27T03:52:05.260 に答える