java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=intent} to activity

StackOverflow https://stackoverflow.com/questions/13576570

Question

In my app I hit a button called Pick Photo and it loads the gallery. When I click an image in the gallery, the app force closes and in my logcat I receive the following:

    java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://media/external/images/media/3369 (has extras) }} to activity {cap.shot/cap.shot.LolcatActivity}: java.lang.NullPointerException
    at android.app.ActivityThread.deliverResults(ActivityThread.java:2655)
    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2697)
    at android.app.ActivityThread.access$2000(ActivityThread.java:124)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:998)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3806)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NullPointerException
    at cap.shot.LolcatView.loadFromUri(LolcatView.java:137)
    at cap.shot.LolcatActivity.loadPhoto(LolcatActivity.java:384)
    at cap.shot.LolcatActivity.onActivityResult(LolcatActivity.java:299)
    at android.app.Activity.dispatchActivityResult(Activity.java:3988)
    at android.app.ActivityThread.deliverResults(ActivityThread.java:2651)

My lolcatactivity.java is available here: http://pastebin.com/AVL8CswT My lolcatview.java is available here: http://pastebin.com/vD7vCBgY

Thank you!

Was it helpful?

Solution

getDrawable is returning null in your case. The uri that you are using for setImageURI may not be valid, hence you are getting null.

Do a null check for drawable, if drawable is null , you need to bail.

Edit:

if(drawable == null)
  return;

OTHER TIPS

i have checked your code so i think you need to replace your button action like this

    private static final int SELECT_PHOTO = 100

                    Intent photoPickerIntent = new Intent(
                            Intent.ACTION_PICK);
                    photoPickerIntent.setType("image/*");
                    startActivityForResult(photoPickerIntent, SELECT_PHOTO);

and in your Start activity result give

@Override
protected void onActivityResult(int requestCode, int resultCode,
        Intent imageReturnedIntent) {
    System.out.println("requestcode" + requestCode + "result code "
            + requestCode + "intentt" + imageReturnedIntent);

    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);

    switch (requestCode) {
    case SELECT_PHOTO:
        if (resultCode == RESULT_OK) {

            // InputStream imageStream;
            try {
                Uri selectedImage = imageReturnedIntent.getData();
                Bitmap yourSelectedImage = decodeUri(selectedImage);
                // imageStream = getContentResolver().openInputStream(
                // selectedImage);
                // Bitmap yourSelectedImage = BitmapFactory
                // .decodeStream(imageStream);
                try {
                    yourimageview.setImageBitmap(yourSelectedImage);
                    picArray = convertBitmap(yourSelectedImage);
                    String imagepath_new = getRealPathFromURI(selectedImage);

                    System.out.println("gakk" + imagepath_new);
                    String[] s = imagepath_new.split("/");
                    System.out.println(s[s.length - 1]);
                    String imageName1 = s[s.length - 1];
                    imageName1 = imageName1.replace(" ", "");

                } catch (Exception e) {
                    Toast.makeText(getApplicationContext(),
                            "Exception" + e, 1000).show();
                }

            } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        break;

And also Add these lines to avoid the memory leakage while display the image view in your Activity.

private byte[] convertBitmap(Bitmap bm) {
    // int bytes = bm.getWidth() * bm.getHeight() * 4; // calculate how many
    // bytes our image
    // consists of. Use a
    // different value than
    // 4 if you don't use
    // 32bit images.

    // ByteBuffer buffer = ByteBuffer.allocate(bytes); // Create a new
    // buffer
    // bm.copyPixelsToBuffer(buffer); // Move the byte data to the buffer

    // byte[] array = buffer.array(); // Get the underlying array containing
    // the data.

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    bm.compress(Bitmap.CompressFormat.PNG, 100, stream);

    byte[] array = stream.toByteArray();
    return array;
}

private Bitmap decodeUri(Uri selectedImage) throws FileNotFoundException {

    // Decode image size
    BitmapFactory.Options o = new BitmapFactory.Options();
    o.inJustDecodeBounds = true;
    BitmapFactory.decodeStream(
            getContentResolver().openInputStream(selectedImage), null, o);

    // The new size we want to scale to
    final int REQUIRED_SIZE = 140;

    // Find the correct scale value. It should be the power of 2.
    int width_tmp = o.outWidth, height_tmp = o.outHeight;
    int scale = 1;
    while (true) {
        if (width_tmp / 2 < REQUIRED_SIZE || height_tmp / 2 < REQUIRED_SIZE) {
            break;
        }
        width_tmp /= 2;
        height_tmp /= 2;
        scale *= 3;
    }

    // Decode with inSampleSize
    BitmapFactory.Options o2 = new BitmapFactory.Options();
    o2.inSampleSize = scale;
    return BitmapFactory.decodeStream(
            getContentResolver().openInputStream(selectedImage), null, o2);

}

public String getRealPathFromURI(Uri contentUri) {

    // can post image
    String[] proj = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(contentUri, proj, // Which columns to
                                                    // return
            null, // WHERE clause; which rows to return (all rows)
            null, // WHERE clause selection arguments (none)
            null); // Order-by clause (ascending by name)
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();

    return cursor.getString(column_index);

}

private Bitmap decodeFile(File f) {
    Bitmap b = null;
    try {
        // Decode image size
        BitmapFactory.Options o = new BitmapFactory.Options();
        o.inJustDecodeBounds = true;

        FileInputStream fis = new FileInputStream(f);
        BitmapFactory.decodeStream(fis, null, o);

        fis.close();

        int scale = 10;
        // Decode with inSampleSize
        BitmapFactory.Options o2 = new BitmapFactory.Options();
        o2.inSampleSize = scale;
        fis = new FileInputStream(f);
        b = BitmapFactory.decodeStream(fis, null, o2);
        fis.close();
    } catch (IOException e) {

    }
    return b;
}

hope this willl help you

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top