2016-05-19 6 views
0

私はいくつかの質問を読んだが、ファイルの保存についてはAndroid Guideだが、どこが間違っているのか分からない。ファイルの保存中に、SDカードのパスではなく内部パスが取得されています。

SDカードの画像ディレクトリにある新しいフォルダに画像を保存しようとしています。

私はマニフェストに<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>を持っています。

スローされたエラーがある場合NullPointerException

この方法で
String storageStage = Environment.getExternalStorageState(); 

    File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory (
      Environment.DIRECTORY_PICTURES),"/WordResolver"); 

    mediaStorageDir.mkdirs(); 

    if (! mediaStorageDir.exists()){ 
      if(! mediaStorageDir.mkdirs()) { 

       Log.d("WordResolver", "Failed to create directory"); 
       return null; 
      } 
    } 

    //Creating Media File Name 
    String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()); 
    File mediaFile; 

    if (type == MEDIA_TYPE_IMAGE) { 
     mediaFile = new File (mediaStorageDir.getPath() + File.separator + "IMG_WR" + 
       timeStamp + ".jpg"); 
    } else { 
      return null; 
     } 

    return mediaFile; 

} 

を例外をスローします。プログラムはあなたがここに見ることができるように内部ストレージにはなく、SDカードに保存しようとしているので、それは奇妙な問題です理由:私は​​という印象の下にあったとして

1

を外部ストレージに保存されますか?それが重要な場合、私は、エミュレートデバイスを使用してい

                  java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.aaron.wordresolver/com.example.aaron.wordresolver.cameraShot}: java.lang.NullPointerException: file 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476) 
                       at android.app.ActivityThread.-wrap11(ActivityThread.java) 
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344) 
                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                       at android.os.Looper.loop(Looper.java:148) 
                       at android.app.ActivityThread.main(ActivityThread.java:5417) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
                      Caused by: java.lang.NullPointerException: file 
                       at android.net.Uri.fromFile(Uri.java:452) 
                       at com.example.aaron.wordresolver.cameraShot.getOutputMediaFileUri(cameraShot.java:55) 
                       at com.example.aaron.wordresolver.cameraShot.onCreate(cameraShot.java:45) 
                       at android.app.Activity.performCreate(Activity.java:6237) 
                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107) 
                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369) 
                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)  
                       at android.app.ActivityThread.-wrap11(ActivityThread.java)  
                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)  
                       at android.os.Handler.dispatchMessage(Handler.java:102)  
                       at android.os.Looper.loop(Looper.java:148)  
                       at android.app.ActivityThread.main(ActivityThread.java:5417)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)  

は、ここでスタックトレースです!私はEnvironment.getExternalStoragePublicDirectoryが外部ストレージに保存します印象であったように

乾杯

答えて

1

です。あなたはその道を見ることでそれを知ることができます。今日使用されているデバイスはほぼゼロで、external storageは「SDカード」です。 SDカードはremovable storageで、Android 4.4以降のファイルシステムではアクセスできません。

スタックトレースに関して、いずれの場合も同じ現象が発生するため、問題がmediaStorageDirまたはtypeに関連するかどうかを判断する必要があります。 targetSdkVersionが23以上で、Android 6.0以降で動作している場合はyou need to request your external storage permission at runtimeです。

+0

23歳以上のアクセス権を要求しなければならないことがわかっていて、それをソートしました。いい男! – COYG

関連する問題