Null pointer Exception on file- URI?

后端 未结 4 1137
感动是毒
感动是毒 2020-12-11 05:19

In my app a capture button is there to capture an image using device camera,so I have used a method captureImage() on the click event of that button.When I click the button

相关标签:
4条回答
  • 2020-12-11 06:01

    getOutputMediaFile(type) returns null.

     public Uri getOutputMediaFileUri(int type) {
        return Uri.fromFile(getOutputMediaFile(type));
    }
    

    You are returning here:

    // Create the storage directory if it does not exist
    if (!mediaStorageDir.exists()) {
        if (!mediaStorageDir.mkdirs()) {
            Log.d(TAG, "Oops! Failed create "
                    + Config.IMAGE_DIRECTORY_NAME + " directory");
            return null;
        }
    }
    

    Have you added the following permission

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    

    to your manifest?

    0 讨论(0)
  • 2020-12-11 06:03
    File mediaStorageDir = new File(
                Environment
                      .getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),
                Config.IMAGE_DIRECTORY_NAME);
    

    I directly copied to code from Android getting started page. My problem was I was running it on emulator. Therefore I think the code above that I used could not assess my file system.

    0 讨论(0)
  • 2020-12-11 06:07

    In my case, I found out SDK version 23 and up might need runtime permission for writing external storage. So I solved like this:

    public Uri getOutputMediaFileUri(int type) {
            requestRuntimePermission();
            return Uri.fromFile(getOutputMediaFile(type));
        }
    
    public void requestRuntimePermission() {
            if (Build.VERSION.SDK_INT >= 23) {
                if (ContextCompat.checkSelfPermission(context,android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
                        != PackageManager.PERMISSION_GRANTED) {
                    ActivityCompat.requestPermissions(activity,
                            new String[]{android.Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
                }
            }
        }
    

    Note: You might put this instead of context and activity above if applicable

    0 讨论(0)
  • My solution was simple.

    Realised the error. Android Manifest had put a maxSDKVersion to 18 on the permission to write to storage. After removing that, it was working perfectly.

    0 讨论(0)
提交回复
热议问题