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

사진(이미지) setImageBitmap 널엑셉션 질문입니다!!

0 추천

안녕하세요.. 다름이 아니라 널엑셉션이 발생하는데 원인을 모르겠어서 코드 팁 좀 부탁드릴게요ㅠㅠ

String strUri = memo.getString(memo.getColumnIndexOrThrow(MemoDbAdapter.KEY_PHOTO));
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
Bitmap image = BitmapFactory.decodeFile(strUri, options);
mPhoto.setImageBitmap(image);
 
위 소스 부분에서 db에 저장된 KEY_PHOTO라는 string 값을 가져와서 strUri에 저장해줍니다.
그리고 비트맵 옵션을 만들고, image를 생성하는데요~!!!
이렇게 작성하고 일기장을 만들면, 널엑셉션 에러가 발생합니다....
왜 그런걸까요...??
(참고로 KEY_PHOTO엔 갤러리에서 선택한 사진의 URI 를 스트링으로 변환한 값이 저장되어있습니다!)
(mPhoto 는 imageView 입니다)
사자87 (240 포인트) 님이 2014년 12월 22일 질문

2개의 답변

0 추천
mPhoto 혹은 Bitmap이 널인지 체크해보세요.

 

로그가 없어서 판단할 기준이 여기까지 밖에 안되네요
갈무리 (12,430 포인트) 님이 2014년 12월 22일 답변
음..toast를 찍어서 확인을 해봤는데요
처음 일기장을 생성해서 작성할때, 사진을 첨부하면서 보면 경로는 정상적으로 받아오고 저장되고 있습니다만,
생성된 일기장을 다시 열었을때, 저장되었던 사진을 불러오지 못하고 에러가 발생하네요...
정상적으로 저장되었고, 디비에 잘 접근해서 호출하는데 왜 값을 못받아오는지 모르겠네요.....
URI는 'content://'로 시작하는 경로 말씀하신건가요?

decodeFile 은 'file://'로 시작합니다.
0 추천
Bitmap image = BitmapFactory.decodeFile(strUri, options);

여기서 strUri 에는 실제 파일의 경로가 들어가야 합니다.

decodeFile 하기전에 이 파일이 존재하는지 여부를 먼저 검사하시어 존재시에만 decodeFile을하고

없으면 에러 토스트를 띄우든지 하셔요..

File f = new File(strUri);

if(f.exists())

  Bitmap image = BitmapFactory.decodeFile(strUri, options);

else

  Toast. ....
nicehee (73,100 포인트) 님이 2014년 12월 22일 답변
...