마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

sdcard이미지로드시 문제

0 추천
package com.newtalktalk.Adapter;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.newtalktalk.activity.R;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;

public class ImageGridAdapter extends BaseAdapter{

 private Context context = null;
 private List<String> sdcardpath;
 
 public ImageGridAdapter(Context con){
  this.context = con;
  try{
   sdcardpath = new ArrayList<String>();
   File[] file = new File(Environment.getExternalStorageDirectory()+"/newtalktalk/").listFiles();
   for(File filename : file){
    sdcardpath.add(Environment.getExternalStorageDirectory()+"/newtalktalk/" + filename.getName().toString());
   }
  }catch (Exception e) {
   // TODO: handle exception
   
   Log.d("ErrorLog", "ImageAdapter : " + e.toString() );
   
  }
 }
 
 // 이미지의 갯수 
 @Override
 public int getCount() {
  // TODO Auto-generated method stub
  return sdcardpath.size();
 }

 @Override
 public Object getItem(int position) {
  // TODO Auto-generated method stub
  return position ;
 }

 // 선택된 이미지ID를 반환
 @Override
 public long getItemId(int position) {
  // TODO Auto-generated method stub
  return position;
 }

 @Override
 public View getView(int position, View convertView, ViewGroup parent) {
  // TODO Auto-generated method stub
  
  View v = convertView;
  v = View.inflate(context, R.layout.testgridview, null);
  ImageView v_image = (ImageView)v.findViewById(R.id.photoimage);
  Bitmap bmp = BitmapFactory.decodeFile(sdcardpath.get(position).toString());
  try{
   if(null != convertView){
    //v_image = (ImageView)convertView;
    bmp = Bitmap.createScaledBitmap(bmp, 320, 240, true);
    v_image.setImageBitmap(bmp);
   }else{
    //이미지 사이즈 조정 320 * 240
    bmp = Bitmap.createScaledBitmap(bmp, 320, 240, true);
    // 이미지뷰 재정의 
    //v_image = new ImageView(context);
    v_image.setImageBitmap(bmp);
    //ImageViewOnClickListener imageviewclick = new ImageViewOnClickListener(context, Imageids[position]);
    //v_image.setOnClickListener(imageviewclick);
   }
  }catch (Exception e) {
   // TODO: handle exception
   Log.d("ErrorLog", "ImageAdapter GetView : " + e.toString());
  }
  
  bmp = null;
  return v;
 }
}

gridview 로 구현한 것입니다..

사이즈도 줄엿구.. 첫 화면은 잘뜹니다..

근데 여기서.. 스크롤을 계속 반복하게되면..

앱이 죽어버리네요.. 에러를 보니까 아웃오브메모리라는데..

그래서 bitmapfactory.option 을 써봤는데도..

계속 앱이 죽네요.. 이거 해결방안좀 알려주세요 ㅜ.ㅜ

mamongs (4,050 포인트) 님이 2013년 4월 10일 질문

1개의 답변

0 추천
getView () 가장 첫줄의 변수 v 는 지워버리고

if (convertView == null)  convertView = View.inflate(context, R.layout.testgridview, null);

로 바꾸세요.
JINASYS (5,630 포인트) 님이 2013년 4월 10일 답변
헐;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;되네요;;;;;;;;;;;
되긴되는데; 왜되는지 이해가 잘;;;;;;;;;;;;;;;;;
어느부분에서 안되는건지 조금만 설명해주시면 안될까여?ㅜㅜ
null일때 layout을 한번만 설정해서 그런건가요??
널이 아닐때는 재사용?
...