Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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!

like image 649
Jack Avatar asked Oct 05 '22 20:10

Jack


2 Answers

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;
like image 168
nandeesh Avatar answered Oct 11 '22 17:10

nandeesh


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

like image 41
Ramz Avatar answered Oct 11 '22 18:10

Ramz