2010-12-11 29 views
8

Tôi cố gắng tải một hình ảnh từ xa từ máy chủ và nhờ vào nhiều ví dụ mã trên stackoverflow Tôi có một giải pháp hoạt động ở 2 trong số 3 hình ảnh. Tôi không thực sự biết vấn đề là gì với hình ảnh thứ ba và đôi khi khi cho phép mã chạy trong trình gỡ rối ảnh đang tải. Ngoài ra nếu tôi tải hình ảnh vấn đề đầu tiên hai hình ảnh khác đôi khi không được tải.BitmapFactory.decodeStream trả về null mà không có ngoại lệ

Đây là mã:

public static Drawable getPictureFromURL(Context ctx, String url, final int REQUIRED_SIZE) throws NullPointerException { 
    //Decode image size 
    BitmapFactory.Options o = new BitmapFactory.Options(); 
    int scale = 1; 
    if (o.outWidth > REQUIRED_SIZE) { 
     scale = (int) Math.pow(2, (int) Math.round(Math.log(REQUIRED_SIZE/(double) Math.max(o.outHeight, o.outWidth))/Math.log(0.5))); 
    } 
    Log.i(Prototype.TAG, "scale: "+scale); 

    //Decode with inSampleSize 
    BitmapFactory.Options o2 = new BitmapFactory.Options(); 
    o2.inSampleSize = scale; 
    Bitmap bmp; 
    try { 
     bmp = BitmapFactory.decodeStream((InputStream) Tools.fetch(url), null, o2); 
     if(bmp!=null) 
      return new BitmapDrawable(ctx.getResources(), bmp); 
     else 
      return null; 
    } catch (Exception e) { 
     Log.e(Prototype.TAG, "Exception while decoding stream", e); 
     return null; 
    } 
} 

Trong gỡ lỗi tôi phát hiện ra rằng o.outWidth là -1 mà chỉ một lỗi, nhưng không có ngoại lệ được ném ra, vì vậy tôi có thể không thực sự biết những gì đã xảy ra. InputStream luôn trả về giá trị hợp lệ và tôi biết rằng hình ảnh tồn tại trên máy chủ.

Best wishes, Daniel

Trả lời

16

Tôi tìm thấy câu trả lời here và cập nhật các phương pháp lấy tới:

private static InputStream fetch(String address) throws MalformedURLException,IOException { 
    HttpGet httpRequest = new HttpGet(URI.create(address)); 
    HttpClient httpclient = new DefaultHttpClient(); 
    HttpResponse response = (HttpResponse) httpclient.execute(httpRequest); 
    HttpEntity entity = response.getEntity(); 
    BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity); 
    InputStream instream = bufHttpEntity.getContent(); 
    return instream; 
} 
+0

+1, nhưng có vẻ như bây giờ mà những hình ảnh đang được tải về theo thứ tự thay vì song song (Tôi đang vẽ từng hình ảnh trên một AsyncTask riêng biệt). Ít nhất nó hoạt động .. – kellogs

Các vấn đề liên quan