0

親愛なる皆さん、私がAndroidで画像をダウンロードするために以下のコードを使用しています。ここで、_inはInputStreamおよびDataInputStream_dinです。1つのURLを使用して画像をダウンロードしますが、画像が返される場合と、ビットマップにnullが表示されない場合があります。ここで1つの質問があります。これは、画像をダウンロードするためのこの良い方法です。時々画像を返し、時々それは機能しませんか?

if (_in == null) {
        _in = urlConnection.getInputStream();
    }
    if (_din == null) {
        _din = new DataInputStream(_in);
    }

    byte[] data = new byte[0];
    byte[] buffer = new byte[512];
    int bytesRead;
    while ((bytesRead = _din.read(buffer)) > 0) {           
        byte[] newData = new byte[data.length + bytesRead];         
        System.arraycopy(data, 0, newData, 0, data.length);         
        System.arraycopy(buffer, 0, newData, data.length, bytesRead);           
        data = newData;
    }       
    InputStream is = new ByteArrayInputStream(data);
    Bitmap bmp = BitmapFactory.decodeStream(is);
4

2 に答える 2

0

画像InputStreamに一時バッファを使用するのはなぜですか? UrlConnection InputStream を BitmapFactory で直接使用するだけです。

_in = urlConnection.getInputStream();
Bitmap bmp = BitmapFactory.decodeStream(_in);

画像に問題がなければ、これは常に機能するはずです。

于 2012-08-29T17:24:32.473 に答える
0

これを試して、問題がまだ発生するかどうか教えてください。

Bitmap ret;
        HttpURLConnection conn = null;          
        try
        {
            URL u = new URL(mUrl);
            conn = (HttpURLConnection) u.openConnection();
            conn.setConnectTimeout(CONNECTION_TIMEOUT);
            conn.setReadTimeout(CONNECTION_TIMEOUT);
            conn.setDoInput(true);
            conn.setRequestMethod("GET");

            int httpCode = conn.getResponseCode();
            if (httpCode == HttpURLConnection.HTTP_OK || httpCode == HttpURLConnection.HTTP_CREATED)
            {
                InputStream is = new BufferedInputStream(conn.getInputStream());
                ret = BitmapFactory.decodeStream(is);
            }
            else
            {
                ret = null;
            }
        }
        catch (Exception ex)
        {
            ret = null;
        }
        finally
        {
            if (conn != null)
            {
                conn.disconnect();
            }
        }
于 2012-08-29T17:21:11.327 に答える