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

RuntimeException에서 에러가나는데 도와주세요.ㅠ

0 추천
public VoiceRecording( Handler handler ){
    this.handler = handler;
    File path = new File(
            Environment.getExternalStorageDirectory().getAbsolutePath()
                    + "/sdcard/meditest/");
    path.mkdirs();
    try {
        recordingFile = File.createTempFile("recording", ".pcm", path);
    } catch (IOException e) {
        throw new RuntimeException("Couldn't create file on SD card", e);
    }
}
 
 
 
error
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jjunsoft1.smartdoll/com.jjunsoft1.smartdoll.MainActivity}: java.lang.RuntimeException: Couldn't create file on SD card
 
이러게 에러가 뜨는데 왜그런거인가요?? 해결방법이없나요?ㅠㅠ
안드드드드드 (850 포인트) 님이 2018년 10월 26일 질문

1개의 답변

0 추천

질문을 한 뒤에는 다시 한 번 확인을 해보세요. 올리신 코드와 로그는 뒷부분으로 드래그가 되지 않기 때문에 답변을 달아주려고 들어온 사람들이 번거로워서 그냥 나가버립니다. 

성의없는 질문에 상세한 답변을 달아줄 사람은 없습니다.

public VoiceRecording( Handler handler ){
    this.handler = handler;
    File path = new File(
            Environment.getExternalStorageDirectory().getAbsolutePath()
                    + "/sdcard/meditest/");
    path.mkdirs();
    try {
        recordingFile = File.createTempFile("recording", ".pcm", path);
    } catch (IOException e) {
        throw new RuntimeException("Couldn't create file on SD card", e);
    }
}
java.lang.RuntimeException: Unable to start activity ComponentInfo: java.lang.RuntimeException: Couldn't create file on SD card

이렇게 해놓으면 보는 사람도 편하니, 답변을 해줄 마음도 생기는거고요.


에러는 Couldn't create file on SD card니까 WRITE_EXTERNAL_STORAGE 권한이 없는지 확인해보세요. 

그리고 try - catch는 e.printStackTrace() 로 로그를 찍는게 더 상세하니 그걸로 바꿔보세요.

쎄미 (162,410 포인트) 님이 2018년 10월 26일 답변
네! 부족하게 올린부분은 죄송합니다 그리고 도움주셔서 감사합니다 확인더해보겠습니다^^
WRITE_EXTERNAL_STORAGE권한은 준상태이고
throw new RuntimeException빼고 e.printStackTrace()넣으면 애러는 안뜨는데 null로 들어와져요.
manifest에 선언만 하게 아니라 http://gun0912.tistory.com/61 처럼 동적으로 권한까지 받아도 그런가요? e.printStackTrace() 했을 때의 로그를 보면 답이 나올겁니다.
아마도 FileProvider를 제공해주셔야 할 겁니다. 그리고 굳이 public storage에 저장을 안해도 app internal storage를 이용하면 permission을 요청하지 않으셔도 가능할 겁니다. Github에서 Shutter라는 라이브러리 소스를 보시면 퍼미션 요청없이 카메라로 찍은 사진을 저장하는 부분이 있습니다. 여기에 FileProvider 코드도 같이 들어 있습니다.
https://developer.android.com/reference/android/support/v4/content/FileProvider
앞전에 퍼미션을 동적으로 받아 해결했는데..컴터가 새로와서 안드로이드 스튜디오를 새로깔고 다시 실행시키니 다시한번똑같은 에러가뜨네.ㅠㅠ
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.jjunsoft1.smartdoll, PID: 2938
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.jjunsoft1.smartdoll/com.jjunsoft1.smartdoll.MainActivity}: java.lang.RuntimeException: Couldn't create file on SD card
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2957)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032)
        at android.app.ActivityThread.-wrap11(Unknown Source:0)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696)
        at android.os.Handler.dispatchMessage(Handler.java:105)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6944)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374)
     Caused by: java.lang.RuntimeException: Couldn't create file on SD card
        at com.jjunsoft1.smartdoll.VoiceRecording.<init>(VoiceRecording.java:82)
        at com.jjunsoft1.smartdoll.MainActivity.onCreate(MainActivity.java:76)
        at android.app.Activity.performCreate(Activity.java:7183)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6944) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
     Caused by: java.io.IOException: Permission denied
        at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:281)
        at java.io.File.createTempFile(File.java:2001)
        at com.jjunsoft1.smartdoll.VoiceRecording.<init>(VoiceRecording.java:79)
        at com.jjunsoft1.smartdoll.MainActivity.onCreate(MainActivity.java:76) 
        at android.app.Activity.performCreate(Activity.java:7183) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1220) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2910) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3032) 
        at android.app.ActivityThread.-wrap11(Unknown Source:0) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1696) 
        at android.os.Handler.dispatchMessage(Handler.java:105) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6944) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:327) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1374) 
...