Search code examples
androidcameranullpointerexceptioncursoruri

Why Am I Getting Failure Delivering Result ResultInfo Using Camera?


I am a noob to android development and I am having trouble returning an image taken by the camera. My app runs fine when I take a picture vertically/portrait, but when take a picture horizontally/landscape the app crashes with an error that says Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} . I've adjusted my width & height of my output pic with no success. Any help is greatly appreciated.

MY CODE

 protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (resultCode == RESULT_OK) {
        //check if we are returning from picture selection
        if (requestCode == PICKER) {

            //the returned picture URI
     //       Uri pickedUri = data.getData();

            //declare the bitmap
            Bitmap pic = null;
            //declare the path string
            String imgPath = "";

            //retrieve the string using media data
            String[] medData = { MediaStore.Images.Media.DATA };
            //query the data
            Cursor picCursor = managedQuery(outputFileUri, medData, null, null, null);
            if(picCursor!=null)
            {
                //get the path string
                int index = picCursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                picCursor.moveToFirst();
                imgPath = picCursor.getString(index);
            }
            else
                imgPath = outputFileUri.getPath();

            //if and else handle both choosing from gallery and from file manager

            //if we have a new URI attempt to decode the image bitmap
            if(outputFileUri!=null) {

                //set the width and height we want to use as maximum display
                int targetWidth = 600;
                int targetHeight = 400;

                //sample the incoming image to save on memory resources

                //create bitmap options to calculate and use sample size
                BitmapFactory.Options bmpOptions = new BitmapFactory.Options();

                //first decode image dimensions only - not the image bitmap itself
                bmpOptions.inJustDecodeBounds = true;
                BitmapFactory.decodeFile(imgPath, bmpOptions);

                //work out what the sample size should be

                //image width and height before sampling
                int currHeight = bmpOptions.outHeight;
                int currWidth = bmpOptions.outWidth;

                //variable to store new sample size
                int sampleSize = 1;

                //calculate the sample size if the existing size is larger than target size
                if (currHeight>targetHeight || currWidth>targetWidth) 
                {
                    //use either width or height
                    if (currWidth>currHeight)
                        sampleSize = Math.round((float)currHeight/(float)targetHeight);
                    else 
                        sampleSize = Math.round((float)currWidth/(float)targetWidth);
                }
                //use the new sample size
                bmpOptions.inSampleSize = sampleSize;

                //now decode the bitmap using sample options
                bmpOptions.inJustDecodeBounds = false;

                //get the file as a bitmap
                pic = BitmapFactory.decodeFile(imgPath, bmpOptions);

                if(currentPic<=10){                     
                    //pass bitmap to ImageAdapter to add to array
                    imgAdapt.addPic(pic);
                    currentPic++;
                }

                //redraw the gallery thumbnails to reflect the new addition
                picGallery.setAdapter(imgAdapt);

                //display the newly selected image at larger size
                picView.setImageBitmap(pic);
                //scale options
                picView.setScaleType(ImageView.ScaleType.FIT_CENTER);
            }
        }
    }
    //superclass method
    super.onActivityResult(requestCode, resultCode, data);
}

LOGCAT

04-03 08:26:46.113: E/AndroidRuntime(15318): Caused by: java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=null} to activity {com.example.pickenssurvey/com.example.pickenssurvey.PictureGallery}: java.lang.NullPointerException
04-03 08:26:46.113: E/AndroidRuntime(15318):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3179)
04-03 08:26:46.113: E/AndroidRuntime(15318):    at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2534)
04-03 08:26:46.113: E/AndroidRuntime(15318):    ... 13 more
04-03 08:26:46.113: E/AndroidRuntime(15318): Caused by: java.lang.NullPointerException
04-03 08:26:46.113: E/AndroidRuntime(15318):    at android.content.ContentResolver.acquireProvider(ContentResolver.java:913)
04-03 08:26:46.113: E/AndroidRuntime(15318):    at android.content.ContentResolver.query(ContentResolver.java:305)
04-03 08:26:46.113: E/AndroidRuntime(15318):    at android.app.Activity.managedQuery(Activity.java:1742)
04-03 08:26:46.113: E/AndroidRuntime(15318):    at com.example.pickenssurvey.PictureGallery.onActivityResult(PictureGallery.java:241)
04-03 08:26:46.113: E/AndroidRuntime(15318):    at android.app.Activity.dispatchActivityResult(Activity.java:4723)
04-03 08:26:46.113: E/AndroidRuntime(15318):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3175)

Solution

  • When your screen orientation changes, your Activity is destroyed and recreated in the new orientation. So any variables that gained a reference during the life of the Activity will no longer refer to anything, and if you then try to access objects they refer to without re-assigning them values, you'll get a NullPointerException.

    The method onSaveInstanceState() is used to save temporary data between configuration changes. This creates a Bundle which is passed to onCreate() when the Activity starts up again.

    Without any code, I don't know if that's your problem, but it's worth a look.

    See http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges for more information (and more accurate information than I've provided, no doubt).

    Not mine copied from other post