서버에서 요청해서 비트맵을 약 30개정도 받아옵니다.
항상은 아니고.. 가끔씩.. 아웃오브메모리에러가 나네요.
bitmap = BitmapFactory.decodeStream(input);
이부분에서 에러가 나는 것 같네요..
어떤식으로 고칠 수 있을까요.?
getBitmap() 매서드는 thread의 run()안에서 돌아갑니다.
private void getBitmap(){
HttpURLConnection conn;
Bitmap bitmap;
BibleInfo_FromServer cur_bible;
Iterator<BibleInfo_FromServer> it = ul.iterator();
// URL_ArrayList 하나하나에 대해서 반복문에서 http연결을 하고 bitmap을 가져옴.
int i=0;
while(it.hasNext()) {
try {
//url제공.
cur_bible = it.next();
URL url = new URL(cur_bible.picture);
conn = (HttpURLConnection)url.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream input = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(input);
//가져온 Bitmap들을 Bitmap_ArrayList에 저장함.
cur_bible.bitmap = bitmap;
//스토어를 클릭했을 때, 상세이미지도 받아내는 곳.
if(is_store_clicked.equals("true")){
//picture에 _01 붙이기 (상세이미지 url)
String picture = cur_bible.picture;
picture = picture.replace(".Jpeg","_01.Jpeg");
URL url1 = new URL(picture);
// Log.d("메시지", "url 얻는 부분에서 cur_bible.picture = "+ cur_bible.picture);
conn = (HttpURLConnection)url1.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream input1 = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(input1);
//상세이미지 비트맵 저장
//상세이미지는 사이즈를 조절해서 저장함.
cur_bible.bitmap_detail_image = resizeBitmapImage(bitmap, 4050);
Log.d("메시지","변환 후 비트맵 : "+cur_bible.bitmap_detail_image);
}
로그입니다.
E/AndroidRuntime: FATAL EXCEPTION: Thread-6741
Process: com.example.pc., PID: 6209
java.lang.OutOfMemoryError: Failed to allocate a 1440012 byte allocation with 1178560 free bytes and 1150KB until OOM
at dalvik.system.VMRuntime.newNonMovableArray(Native Method)
at android.graphics.BitmapFactory.nativeDecodeStream(Native Method)
at android.graphics.BitmapFactory.decodeStreamInternal(BitmapFactory.java:752)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:728)
at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:766)
at .myapp.Bitmap_GetFromURL.getBitmap(Bitmap_GetFromURL.java:56)
at myapp.Bitmap_GetFromURL.run(Bitmap_GetFromURL.java:33)