파싱하는주소:http://appserver.jbnu.ac.kr/dbfood/viewdataimagejson.php (여기서 "imagefile"이 url 부분)
json에서 이미지주소를 파싱하여 android 안에서 url에 저장하고, order가 10인 이미지 url만 비트맵형식으로 변환하여 imageview에 넣어주는 형태로 코딩하였는데, 에러가납니다...뭐가 잘못된걸까요ㅜ... 도와주세요
imageurl을 파싱하여 오고, order가 10이면 getImageBitmap함수에 넘깁니다
try{ JSONArray jaimage = new JSONArray(((String)msg.obj).replace("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\">", "")); for(int i=0; i<jaimage.length(); i++){JSONObject orderimage = jaimage.getJSONObject(i);
Integer id = new Integer(orderimage.getInt("basic_id")); String url = orderimage.getString("imagefile"); int order = orderimage.getInt("order"); if (hashData.containsKey(id)) {Recipe recipe = hashData.get(id);
recipe.image_url = url;
if(order == 10){recipe.image = getImageBitmap(url);
}
}
}
}
getImageBitmap함수
private Bitmap getImageBitmap(String url) {Bitmap bm = null;
try{ URL aURL = new URL("url);URLConnection conn = aURL.openConnection();
conn.connect();
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
bm = BitmapFactory.decodeStream(bis);
bis.close();
is.close();
}
catch(IOException e){ Log.e("TTT", "Error getting bitmap");}
return bm;
}
getView에서 ImageView에 넣어줌(텍스트는 모두 잘 작동합니다)
final Recipe r = recipes.get(position);
TextView tvName = (TextView)convertView.findViewById(R.id.textfoodname);
tvName.setText(r.name);
TextView tvMaker = (TextView)convertView.findViewById(R.id.textfoodmaker);
tvMaker.setText(r.maker);
ImageView imageMain = (ImageView)convertView.findViewById(R.id.image_directrecipemain);
imageMain.setImageBitmap(r.image);
Error Logcat(getImageBitmap catch부분에서 읽어오는 것같아요ㅠ) 개발환경은 애뮬레이터 2.2 프로요버전쓰고있어요
08-21 09:27:44.882: E/TTT(32107): Error getting bitmap
08-21 09:27:44.882: E/TTT(32107): Error getting bitmap
08-21 09:27:44.882: E/TTT(32107): Error getting bitmap
08-21 09:27:44.892: E/TTT(32107): Error getting bitmap
08-21 09:27:44.892: E/TTT(32107): Error getting bitmap
네트워크상의 파일이 IO예외를 일으키는 경우는 경로가 잘못되었을때가 대부분입니다.
URL aURL = new URL("url);
부분의 "url은 오타같아 보이고...
음... inputStream 생성시에도 IO예외를 발생시키니
buffered쓰지 마시고 그냥
InputStream is = conn.getInputStream();
이용해 보세요...
아니면
int nSize = conn.getContentLength();
BufferedInputStream bis = new BufferedInputStream(conn.getInputStream(), nSize);
이렇게 이용해 보심이...
네트워크가 IO 속도를 이길수 없는데 버퍼사이즈의 문제가 있는듯하네요...
bis를 buffer사이즈이용해서 작업시켜도 동일 에러라면...
거의 경로문제가 아닐까 하는데...
catch에서 e.getMessage로 출력해서 어떤 에러인지 보심이...




무슨에러가 나셨는지 말씀해 주셔야...
근데 혹시 네트워크 처리는 스레드에서 작업하셨나요
3.0+부터 나는 에러인 메인스레드에서 네트워크처리 예외 발생인거 같은데;;;
getImageBitmap 함수는 별도 스레드에서 호출되어야합니다.