그냥 이것도 저를 위한 메모입니다만, 혹시 저같이 초보인 다른 분들이 헤매실까봐 공개로 해 놓습니다.
NO_ASYNC_TASK일때는 상관 없는데(NO_ASYNC_TASK쓸일은 캐시때문이겠지만...),
NO_DOWNLOADED_DRAWABLE이나 CORRET 사용시입니다.
페이스북api같이 프로필 사진등을 리다이렉션 해주는 주소로 줄때 이러한일이 발생하는데요.
ImageDownloader클래스의 Bitmap downloadBitmap(String url) 메서드를 수정해 주시면 됩니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | Bitmap downloadBitmap(String url) { final int IO_BUFFER_SIZE = 4 * 1024 ; // AndroidHttpClient is not allowed to be used from the main thread final HttpClient client = (mode == Mode.NO_ASYNC_TASK) ? new DefaultHttpClient() : AndroidHttpClient.newInstance( "Android" ); final HttpGet getRequest = new HttpGet(url); try { HttpResponse response = client.execute(getRequest); final int statusCode = response.getStatusLine().getStatusCode(); if (statusCode == 301 || statusCode == 302 ) { Header redirect = response.getFirstHeader( "Location" ); if (client instanceof AndroidHttpClient) ((AndroidHttpClient)client).close(); return downloadBitmap(redirect.getValue()); } if (statusCode != HttpStatus.SC_OK) { Log.w( "ImageDownloader" , "Error " + statusCode + " while retrieving bitmap from " + url); return null ; } final HttpEntity entity = response.getEntity(); if (entity != null ) { InputStream inputStream = null ; try { inputStream = entity.getContent(); // return BitmapFactory.decodeStream(inputStream); // Bug on slow connections, fixed in future release. return BitmapFactory.decodeStream( new FlushedInputStream(inputStream)); } finally { if (inputStream != null ) { inputStream.close(); } entity.consumeContent(); } } } catch (IOException e) { getRequest.abort(); Log.w(LOG_TAG, "I/O error while retrieving bitmap from " + url, e); } catch (IllegalStateException e) { getRequest.abort(); Log.w(LOG_TAG, "Incorrect URL: " + url); } catch (Exception e) { getRequest.abort(); Log.w(LOG_TAG, "Error while retrieving bitmap from " + url, e); } finally { if ((client instanceof AndroidHttpClient)) { ((AndroidHttpClient) client).close(); } } return null ; } |
강조된 부분이 추가된 부분입니다. (Line 12 ~ 18)
저도 잘 모르는지라, 질문하셔도 답은 못할 수 있습니다.
참고 :