0

画像をバイト配列にダウンロードしようとしていますが、エラー メッセージが表示されます。

私は何をすべきか??みんな助けてください

05-29 12:28:13.324: D/ImageManager(6527): Error: java.lang.IllegalArgumentException: Buffer capacity may not be negative

byte []bg1=getLogoImage("http://onlinemarketingdubai.com/hotelmenu/images/874049310_gm.png");


private byte[] getLogoImage(String url){
    try {
        Log.d("Url",url);
        URL imageUrl = new URL(url);
        URLConnection ucon = imageUrl.openConnection();
        HttpURLConnection conn= (HttpURLConnection)imageUrl.openConnection();
        conn.setDoInput(true);
        conn.connect();
        int length = conn.getContentLength();
        InputStream is = ucon.getInputStream();
        BufferedInputStream bis = new BufferedInputStream(is);

        ByteArrayBuffer baf = new ByteArrayBuffer(length);
        int current = 0;
        while ((current = bis.read()) != -1) {
            baf.append((byte) current);
        }

        return baf.toByteArray();
    } catch (Exception e) {
        Log.d("ImageManager", "Error: " + e.toString());
    }
return null;
}
4

1 に答える 1

3

ByteArrayBufferクラスを見てみましょう:

public final class ByteArrayBuffer  {

  private byte[] buffer;
  private int len;

  public ByteArrayBuffer(int capacity) {
      super();
      if (capacity < 0) {
       throw new IllegalArgumentException("Buffer capacity may not be negative");
      }

length取得したバッファの値を渡して初期化していcapacityます。

int length = conn.getContentLength();

したがって、問題は接続の長さに由来します。コンテンツの長さが不明であるため、これは -1 であると考えられます。サーバーが応答メッセージに「Content-Length」ヘッダーを設定していない可能性があります。

これを解決するには、この回答を見てください。

于 2013-05-29T07:56:25.737 に答える