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

비트맵 널 값 해결하는 방법은 어떻게 해야하죠?

0 추천

저번에도 올렸던 질문인데 해결법을 잘 몰라서 한번 더 부탁드릴려고 합니다.

 

화면 캡쳐 버튼 기능을 구성했습니다.

container.buildDrawingCache();
   Bitmap captureView = container.getDrawingCache();
   FileOutputStream fos;
   
   Intent it3=getIntent(); 
   String str_name=it3.getStringExtra("it3_name");  
   
   File fileRoute = null;
   fileRoute = Environment.getExternalStorageDirectory();
     
   
   
   try {
  
    File path = new File(fileRoute+"/play");
    if(!path.isDirectory()){
     path.mkdirs();
    }
    
    fos = new FileOutputStream(fileRoute+"/play/-"+str_name+"-.jpeg");
    captureView.compress(Bitmap.CompressFormat.JPEG, 100, fos); //843번째 줄
   }catch (FileNotFoundException e) {
    
    e.printStackTrace();
    
   }  
    Toast.makeText(getApplicationContext(), "/sdcard/FaceOn으로 저장되었습니다.", Toast.LENGTH_LONG).show();

 

위에 소스가 현재 2.2 프로요 기종(모토로라디파이)에서는 잘됩니다.

그런데 ics기기에서 (옵티머스 Ex) 테스트를 해봣는데 캡쳐버튼을 누르면 죽습니다.

로그캣을 봤는데  843번째 줄이 굵은 부분입니다.

 

 

로그를 찍어보니

비트맵 값이 널값이 납니다. ics에서 그러는거 같은데 무슨현상인지 해결법도 잘 모르겠습니다.

이 문제를 어떻게 해결해야 하나요? 

06-16 16:48:48.390: E/AndroidRuntime(25620): FATAL EXCEPTION: main

06-16 16:48:48.390: E/AndroidRuntime(25620): java.lang.NullPointerException

06-16 16:48:48.390: E/AndroidRuntime(25620):  at com.example.faceon.ResultActivity.onClick(ResultActivity.java:843)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at android.view.View.performClick(View.java:3524)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at android.view.View$PerformClick.run(View.java:14226)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at android.os.Handler.handleCallback(Handler.java:605)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at android.os.Handler.dispatchMessage(Handler.java:92)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at android.os.Looper.loop(Looper.java:137)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at android.app.ActivityThread.main(ActivityThread.java:4526)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at java.lang.reflect.Method.invokeNative(Native Method)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at java.lang.reflect.Method.invoke(Method.java:511)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:788)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)

06-16 16:48:48.390: E/AndroidRuntime(25620):  at dalvik.system.NativeStart.main(Native Method)

브루스웨인 (8,580 포인트) 님이 2013년 6월 18일 질문
브루스웨인님이 2013년 7월 3일 수정
굵은 글씨는 그쪽 메서드에서 오류났다는거고
cause by: 해서 밑에 로그가 또 적힌걸 보고싶네요...

1개의 답변

0 추천
 
채택된 답변

File path = new File(fileRoute+"/play");

fileRoute 는 File 객체이므로 문자열과 그냥 붙이면 안됩니다.

그리고 경로 구분자가 항상 / 일지는 알 수 없습니다.

File path = new File(fileRoute , "play"); 이렇게 수정하세요. (/가 필요없습니다.)

path.isDirectory() 와 path.exists() 검사도 함께 해야 합니다.

 

fos를 생성할 때 사용한 경로를 로그캣에 찍어보시기 바랍니다.

익명사용자 님이 2013년 6월 18일 답변
브루스웨인님이 2013년 6월 21일 채택됨
...