从图库中获取图片时出现空指针异常 [英] Null Pointer Exception when grabbing picture from Gallery

查看:86
本文介绍了从图库中获取图片时出现空指针异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下代码,用于捕获图像(从相机或图库中获取),然后将其显示在ImageView上:

i have the following code, which is used to grab images (either from camera or gallery) and then display it on an ImageView:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
    if(resultCode == RESULT_OK)
    {
        if(requestCode == 1888)
        {
            final boolean isCamera;
            if(data == null)
            {
                isCamera = true;
            }
            else
            {
                final String action = data.getAction();
                if(action == null)
                {
                    isCamera = false;
                }
                else
                {
                    isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                }
            }

            Uri selectedImageUriTemp;
            Uri selectedImageUri;
            if(isCamera)
            {
                selectedImageUriTemp = outputFileUri;
                Bitmap image = decodeFile(new File(selectedImageUriTemp.getPath()));
                selectedImageUri = getImageUri(image);
            }
            else
            {
                selectedImageUriTemp = data == null ? null : data.getData();
                Bitmap image = decodeFile(new File(selectedImageUriTemp.getPath()));
                selectedImageUri = getImageUri(image);
            }

            Log.i("TAG", "IMAGEURI: " + selectedImageUri);

            pictureThumb.setImageURI(selectedImageUri);
            setRealPath(selectedImageUri);
        }
    }
}

private Uri getImageUri(Bitmap image){
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    image.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = Images.Media.insertImage(getApplicationContext().getContentResolver(), image, "Title", null);
    return Uri.parse(path);
}

如果我尝试使用Camera捕获图像,该代码将起作用,但是当我尝试从Gallery捕获图像时,它将返回NULL指针异常.

The code works if i try to grab an image using Camera, however when i try to grab an image from Gallery it returns NULL pointer exception.

有人可以向我建议正确的方向吗?谢谢

Can anyone suggest me to the right direction? Thanks

这是完整的日志:

02-12 10:34:56.249: E/AndroidRuntime(14607): FATAL EXCEPTION: main
02-12 10:34:56.249: E/AndroidRuntime(14607): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1888, result=-1, data=Intent { dat=content://media/external/images/media/29 }} to activity {com.gelliesmedia.thumbqoo/com.gelliesmedia.thumbqoo.PictureBooth}: java.lang.NullPointerException: uriString
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.app.ActivityThread.deliverResults(ActivityThread.java:3216)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:3259)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.app.ActivityThread.access$1100(ActivityThread.java:138)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1253)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.os.Handler.dispatchMessage(Handler.java:99)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.os.Looper.loop(Looper.java:137)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.app.ActivityThread.main(ActivityThread.java:4954)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at java.lang.reflect.Method.invokeNative(Native Method)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at java.lang.reflect.Method.invoke(Method.java:511)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:798)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:565)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at dalvik.system.NativeStart.main(Native Method)
02-12 10:34:56.249: E/AndroidRuntime(14607): Caused by: java.lang.NullPointerException: uriString
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.net.Uri$StringUri.<init>(Uri.java:464)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.net.Uri$StringUri.<init>(Uri.java:454)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at android.net.Uri.parse(Uri.java:426)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at com.gelliesmedia.thumbqoo.PictureBooth.getImageUri(PictureBooth.java:224)
02-12 10:34:56.249: E/AndroidRuntime(14607):    at com.gelliesmedia.thumbqoo.PictureBooth.onActivityResult(PictureBooth.java:206)

推荐答案

您的onActivityResult非常混乱.

You onActivityResult is very messy.

尝试以这种方式编写代码. 下面的拖曳方法定义为分别从相机捕获图像和从图库中捕获图像.

Try to write code something like this way.. Below tow method is define to capture image from camera and taking image from gallery respectively.

protected void captureFromCamera() {
        // TODO Auto-generated method stub
        Intent cameraIntent = new Intent(
                android.provider.MediaStore.ACTION_IMAGE_CAPTURE);

        startActivityForResult(cameraIntent,
                UploadProfilePicActivity.REQ_CAMERA);
    }

    private void selectImageFromGallery() {
        // TODO Auto-generated method stub
        Intent intent = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,
                getString(R.string.upload_profile_photo)),
                UploadProfilePicActivity.REQ_GALLERY);
    }

现在onActivityResult,您的代码可能是这样的.

Now onActivityResult your code could be something like this..

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == UploadProfilePicActivity.REQ_GALLERY && data != null
                && data.getData() != null) {
            Uri _uri = data.getData();
            try {
                Bitmap profileBmp = Media.getBitmap(getContentResolver(), _uri);
                if (profileBmp != null) {
                    image.setImageBitmap(profileBmp);
                }

            } catch (OutOfMemoryError e) {
                Utility.displayToast(context,
                        getString(R.string.err_large_image));
            } catch (Exception e) {

            }
        } else if (requestCode == UploadProfilePicActivity.REQ_CAMERA
                && data != null) {
            try {
                Bitmap profileBmp = (Bitmap) data.getExtras().get("data");
                if (profileBmp != null) {
                    image.setImageBitmap(profileBmp);
                }
            } catch (OutOfMemoryError e) {
                Utility.displayToast(context,
                        getString(R.string.err_large_image));
            } catch (Exception e) {
            }
        }
    }

使用参数requestCoderesponseCode

这篇关于从图库中获取图片时出现空指针异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆