안녕하세요.
뷰플리퍼응용에 대해 어려움이 있어 도움을 받고자 합니다.
웹서버에서 이미지를 불러와서 이미지 개수만큼 동적으로 이미지뷰를
뷰플리퍼의 자식뷰로 추가하려고 합니다.
다운관련은 AsyncTask로 구현하였는데 잘 안되는것같네요..
아래 내용과 같이 뷰플리퍼와 이미지뷰는 레이아웃xml파일로 정의하였고
메인에서 선언 뒤에, AsyncTask클래스내에서
이미지다운로드=>비트맵 생성 후=>이미지뷰에 삽입=>해당 이미지뷰를 뷰플리퍼에 Add
하지만 바로 FATAL나면서 죽어버리네요.
에러 로그 내역입니다.
저 좀 살려주세요 ㅜㅜ
java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.
이미지 다운과 플리퍼추가하는 소스 첨부합니다.
<Main>
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.viewflipper);
checkNetwork(this); //네트워크 체크
imageView = (ImageView) findViewById(R.id.imageview);
flipper = (ViewFlipper) findViewById(R.id.flipper);
flipper.setOnTouchListener(this);
ImageDownload task = new ImageDownload(imageView, flipper);
task.execute(urls); //이미지 주소
}
<AsyncTask>
public class ImageDownload extends AsyncTask<String, Void, Bitmap>{
ImageView imageView;
String imageURL;
ViewFlipper flipper;
//생성자
public ImageDownload(ImageView imageView, ViewFlipper flipper){
this.imageView = imageView;
this.flipper = flipper;
}

@Override
protected void onPreExecute(){
super.onPreExecute();
}

@Override
protected Bitmap doInBackground(String... strData){
imageURL = strData[0];

Bitmap bitmap = ImageCache.getImage(imageURL); //캐시 내에 같은 이미지가 있는지 체크
if(bitmap == null){
bitmap = ImageDownload(imageURL);
ImageCache.setImage(imageURL, bitmap);
}

return bitmap;
}

@Override
protected void onPostExecute(Bitmap bm){
imageView.setImageBitmap(bm);
flipper.addView(imageView);
}

@Override
protected void onCancelled(){
super.onCancelled();
}

public Bitmap ImageDownload(String imageURL){
try{
URL url = new URL("imageURL);
URLConnection conn = url.openConnection();
conn.connect();

BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
Bitmap bm = BitmapFactory.decodeStream(bis);
bis.close();

return bm;
}catch(Exception e){
e.printStackTrace();
return null;
}
}
}