java.lang.RuntimeException:将结果 ResultInfo{who=null, request=1, result=-1, data=intent} 传递给活动失败

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13576570/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 13:16:35  来源:igfitidea点击:

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

javaandroidruntimeexceptionlang

提问by Hyman

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:

在我的应用程序中,我点击了一个名为 Pick Photo 的按钮,它会加载图库。当我单击图库中的图像时,应用程序强制关闭,并且在我的 logcat 中我收到以下信息:

    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.access00(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/AVL8CswTMy lolcatview.java is available here: http://pastebin.com/vD7vCBgY

我的 lolcatactivity.java 可在此处获得:http: //pastebin.com/AVL8CswT 我的 lolcatview.java 可在此处获得:http://pastebin.com/vD7vCBgY

Thank you!

谢谢!

采纳答案by nandeesh

getDrawableis returning null in your case. The uri that you are using for setImageURImay not be valid, hence you are getting null.

getDrawable在你的情况下返回 null 。您使用的 urisetImageURI可能无效,因此您将获得空值。

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

对 drawable 进行 null 检查,如果 drawable 为 null ,则需要保释。

Edit:

编辑:

if(drawable == null)
  return;

回答by Ramz

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

希望这会帮助你