2012-07-27 2 views
0

ImageButton에 mysql 데이터베이스에서 여러 이미지를로드하는 안드로이드 응용 프로그램이 있습니다. bitmapfactory 이미지로드 실패

imageButton.setImageBitmap(fetchBitmap("http://www...~.jpg")); 

내가 한 번 성공적으로 PNG를로드 할 수 있었다뿐만 아니라 지금 (JPG 이미지 적으로 어떤 성공을) 실패하지 않습니다.

public static Bitmap fetchBitmap(String urlstr) { 
    InputStream is= null; 
    Bitmap bm= null; 
    try{ 
     HttpGet httpRequest = new HttpGet(urlstr); 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpResponse response = (HttpResponse) httpclient.execute(httpRequest); 

     HttpEntity entity = response.getEntity(); 
     BufferedHttpEntity bufHttpEntity = new BufferedHttpEntity(entity); 
     is = bufHttpEntity.getContent(); 
     BitmapFactory.Options factoryOptions = new BitmapFactory.Options(); 
     bm = BitmapFactory.decodeStream(is); 
    }catch (MalformedURLException e){ 
     Log.d("RemoteImageHandler", "Invalid URL: " + urlstr); 
    }catch (IOException e){ 
     Log.d("RemoteImageHandler", "IO exception: " + e); 
    }finally{ 
     if(is!=null)try{ 
      is.close(); 
     }catch(IOException e){} 
    } 
    return bm; 
} 

나는이 오류를 얻을 : - -이 : 여기 다운로드 이미지를 사용하는 코드입니다 here, here 여러 다른 솔루션을 제안 이미 다양한 조합을 시도

D/skia(4965): --- SkImageDecoder::Factory returned null 

는하지만 나던 나를 위해 일해. 내가 놓친 게 있니? 이미지는 내가 입력 한 웹 주소에 분명히 존재합니다.

감사합니다.

답변

0

이미지가 보관 된 디렉토리에 "실행"권한이 없으므로 이미지를 다운로드 할 수 없다는 것이 문제였습니다. 권한이 추가되는 즉시 앱이 부드럽게 작동합니다.

0

이미지를 다운로드하고 비트 맵에 저장하려면 아래 코드를 사용하십시오.

public static Bitmap loadBitmap(String url) { 
    Bitmap bitmap = null; 
    InputStream in = null; 
    BufferedOutputStream out = null; 

    try { 
     in = new BufferedInputStream(new URL(url).openStream(), IO_BUFFER_SIZE); 

     final ByteArrayOutputStream dataStream = new ByteArrayOutputStream(); 
     out = new BufferedOutputStream(dataStream, IO_BUFFER_SIZE); 
     out.flush(); 

     final byte[] data = dataStream.toByteArray(); 
     BitmapFactory.Options options = new BitmapFactory.Options(); 

     bitmap = BitmapFactory.decodeByteArray(data, 0, data.length,options); 
    } catch (IOException e) { 
     Log.e(TAG, "Could not load Bitmap from: " + url); 
    } finally { 
     closeStream(in); 
     closeStream(out); 
    } 

    return bitmap; 
} 
+0

IO_BUFFER_SIZE은 무엇입니까? closeStream()은 단순히 연결을 닫습니까? – gkris

+0

copy() 란 무엇입니까? – gkris

+0

private static final int IO_BUFFER_SIZE = 4 * 1024를 선언합니다. 이것은 버퍼의 크기이며 copy()를 제거하십시오. –