2011-11-29 21 views
5

Khi tôi cố gắng để tải một hình ảnh từ một URL, sử dụng đoạn mã sau (đường dẫn hình ảnh thực loại bỏ):Lỗi đọc từ png.class

Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL("http://some-path/img.png").getContent()); 

tôi nhận được lỗi sau:

Error reading from ./org/apache/harmony/awt/www/content/image/png.class 

Bất kỳ suy nghĩ về những gì có thể gây ra lỗi?

Tôi đang sử dụng AVD của GoogleTV, nếu điều đó quan trọng.

+0

Sản phẩm mã phản hồi máy chủ 200 ? – rekire

+0

Có. Tôi xác nhận rằng URL là hợp lệ. – Steve

+0

Tôi đã sử dụng gói sniffer chỉ để đảm bảo và yêu cầu hình ảnh đang được thực hiện và phản hồi 200 với hình ảnh được trả lại. – Steve

Trả lời

4

Tôi hy vọng điều này sẽ là đủ.

Nếu bạn đang sử dụng php;

echo base64_encode($imgBinary); // You can get the imagebinary by using the fread and fopen methods provided by php 

trên android:

HttpClient client = new DefaultHttpClient(); 
HttpResponse response = client.execute(new HttpGet(url)); 
HttpEntity entity = httpResponse.getEntity(); 

if(entity != null) { 
InputStream is = entity.getContent(); 
byte[] decodedString = Base64.decode(convertStreamToString(is), Base64.DEFAULT); 
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length); 
} 

Đây có lẽ không phải là cách hiệu quả nhất, nhưng nó phải thực hiện công việc. Từ đó bạn có thể tạo :)

Bạn có thể nén bitmap thành PNG sau và an toàn. ví dụ:

decodedByte.compress(compressformat, quality, stream);//suported compress formats can be used like so: Bitmap.CompressFormat.PNG etc 

convertStreamToString là phương pháp dễ dàng tìm thấy. Chỉ cần thực hiện tìm kiếm nhanh trên google hoặc viết của riêng bạn.

2

Hãy thử phương pháp này: làm việc của nó đối với tôi này trả bitmap

bmp=getBitmapFromURL(ur url here); 

ghi phương pháp này

public static Bitmap getBitmapFromURL(String src) { 
     try { 

      URL url = new URL(src); 
      HttpURLConnection connection = (HttpURLConnection) url 
        .openConnection(); 
      connection.setDoInput(true); 
      connection.connect(); 
      InputStream input = connection.getInputStream(); 
      Bitmap mybitmap = BitmapFactory.decodeStream(input); 

      return mybitmap; 

     } catch (Exception ex) { 

      return null; 
     } 
0

Như xa như tôi đã trải qua những tình huống như của bạn tôi thấy rằng các dòng đầu vào cho một hình ảnh không thể có được bằng các phương pháp đơn giản để nhận luồng cố gắng cập nhật những điều sau trong mã của bạn và sau đó kiểm tra kết quả. Tôi chắc chắn bạn sẽ nhận được những gì bạn muốn.

Bitmap bitmap = BitmapFactory.decodeStream(getBitmapStream("http://some-path/img.png")); 

và đây là phương pháp có thể được khai báo trong lớp để được gọi trực tiếp trong phương pháp dòng giải mã của bạn

public InputStream getBitmapStream (String url) 
{ 
    HttpGet httpRequest = null; 
    InputStream instream=null; 
    try { 
     URL bitmapUrl=new URL(url); 
      httpRequest = new HttpGet(bitmapUrl.toURI()); 
      HttpClient httpclient = new DefaultHttpClient(); 
      HttpResponse response = (HttpResponse) httpclient.execute 
    (httpRequest); 

      HttpEntity entity = response.getEntity(); 
      BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity 
    (entity); 
      instream = bufHttpEntity.getContent(); 
    } catch (URISyntaxException e) { 
      e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (ClientProtocolException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 


    return instream; 
} 
0

Tôi đoán sẽ là

URL url = new URL("some url path"); 
URLConnection urlConnection = url.openConnection(); 
BitmapDrawable image = new BitmapDrawable(urlConnection.getInputStream());