0

I am doing an Android application, In which I need to crop captured image and display on screen. But getting NullPointerException, BitmapFactory.decodeFile(file.getPath(), o2); returning null in onActivityResult.

After image capturing the crop screen is not displaying, it directly moving to onActivityResult.

My Code:

camera.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            intent.putExtra(MediaStore.EXTRA_OUTPUT,
                    Uri.fromFile(getTempFile(MainActivity.this)));
            intent.putExtra("index", 0);
            intent.putExtra("crop", "true");
            intent.putExtra("aspectX", 0);
            intent.putExtra("aspectY", 0);
            intent.putExtra("outputX", 200);
            intent.putExtra("outputY", 150);
            intent.putExtra("return-data", true);
            startActivityForResult(intent, 1);
        }
    });

protected File getTempFile(MainActivity mainActivity) {
    boolean isSDPresent = android.os.Environment.getExternalStorageState()
            .equals(android.os.Environment.MEDIA_MOUNTED);
    File path = null;
    if (isSDPresent) {
        path = new File(Environment.getExternalStorageDirectory(),
                this.getPackageName());
    } else {
        ContextWrapper cw = new ContextWrapper(this);

        path = cw.getDir(this.getPackageName(), Context.MODE_PRIVATE);
    }
    if (!path.exists()) {
        path.mkdir();
    }
    String fileName = "image1.jpg";
    return new File(path, fileName);
}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Bundle extras = data.getExtras();
    if(requestCode==1){
        final File file = getTempFile(MainActivity.this);
        o2.inSampleSize = 8;
        Bitmap photo = BitmapFactory.decodeFile(file.getPath(), o2); // getting null here
        image.setImageBitmap(photo);
    }
}

Error Log:

08-06 11:41:33.177: E/AndroidRuntime(28605): FATAL EXCEPTION: main
08-06 11:41:33.177: E/AndroidRuntime(28605): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=0, data=null} to activity {com.example.imagecapture/com.example.imagecapture.MainActivity}: java.lang.NullPointerException
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3135)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3178)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.app.ActivityThread.access$1100(ActivityThread.java:134)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.os.Looper.loop(Looper.java:154)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.app.ActivityThread.main(ActivityThread.java:4624)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at java.lang.reflect.Method.invokeNative(Native Method)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at java.lang.reflect.Method.invoke(Method.java:511)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at dalvik.system.NativeStart.main(Native Method)
08-06 11:41:33.177: E/AndroidRuntime(28605): Caused by: java.lang.NullPointerException
08-06 11:41:33.177: E/AndroidRuntime(28605):    at com.example.imagecapture.MainActivity.onActivityResult(MainActivity.java:99)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.app.Activity.dispatchActivityResult(Activity.java:4672)
08-06 11:41:33.177: E/AndroidRuntime(28605):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3131)
user2085965
  • 393
  • 2
  • 13
  • 33

2 Answers2

0

This issue is present in Android 5.1 and above. This particular version do not sent any data after cropping, so the the bundle gives null pointer exception.

I solved the issue by using some open source libraries.

Go through these, it might be helpful. https://commonsware.com/blog/2013/01/23/no-android-does-not-have-crop-intent.html

Pavan Pyati
  • 950
  • 2
  • 13
  • 18
0

change your // indicate output X and Y// intent.putExtra("outputX", 200); intent.putExtra("outputY", 306); or (200)

impathuri
  • 574
  • 6
  • 21