0

Androidでは、事前にタイプを知らずに画像ファイルをダウンロードする方法はありますか? 画像をダウンロードしてビットマップに設定するこの AsyncTask がありますが、特定の拡張子を強制したくありません。代わりに、受け入れ可能なフォーマットのセットを宣言し、一意のファイル名だけを使用してプルすることを望んでいました。提案や代替案はありますか?

public class asyncGetPhoto extends AsyncTask<Void, String, Bitmap>{
    ProgressBar imageProgress;

    @Override
    protected void onPreExecute(){
        imageProgress = (ProgressBar)findViewById(R.id.aboutusImgProgress);
        imageProgress.setVisibility(View.VISIBLE);
    }

    @Override
    protected Bitmap doInBackground(Void... arg0) {
        String url = "SomeDirectory/images/image1.png"
        Bitmap img = BitmapFactory.decodeStream((InputStream)new URL(url).getContent());
        return img;
    }

    @Override
    protected void onPostExecute(Bitmap img){
        photo.setImageBitmap(img);
        imageProgress.setVisibility(View.GONE);
    }

}
4

1 に答える 1

0

画像をダウンロードするためにタイプを知る必要はありません。画像をバイト配列に取り込み、必要に応じて必要な画像オブジェクトを作成できます。

画像をダウンロードするコードは次のとおりです。

        URL u = new URL(imageUrl);
        URLConnection uc = u.openConnection();
        int contentLength = uc.getContentLength();
        InputStream in = new BufferedInputStream(uc.getInputStream());
        byte[] data = new byte[contentLength];
        int bytesRead;
        int offset = 0;
        while (offset < contentLength) {
            bytesRead = in.read(data, offset, data.length - offset);
            if (bytesRead == -1)
                break;
            offset += bytesRead;
        }
        in.close();
        if (offset != contentLength) {
            throw new IOException("Only read " + offset + " bytes; Expected " + contentLength + " bytes");
        }

次に、ビットマップを作成する場合は、次のようにダウンできます。

Bitmap bmp=BitmapFactory.decodeByteArray(data,0,data.length);
ImageView image=new ImageView(this);
image.setImageBitmap(bmp);
于 2013-05-28T20:40:47.893 に答える