选择图片意图导致空指针异常指针、意图、异常、图片

2023-09-07 15:59:22 作者:爷就TM缺你

 公共无效uploadpicture(查看视图)
        {
            意向意图=新的意图();
            intent.setType(图像/ *);
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(意向,
                    选择图片),SELECT_PICTURE);
        }
        公共无效onActivityResult(INT申请code,INT结果code,意图数据)
            {

            如果(结果code == RESULT_OK)
                 {
                如果(要求code == SELECT_PICTURE)
                     {

                    乌里selectedImageUri = data.getData();
                    selectedImagePath = getPath(selectedImageUri);
                    Toast.makeText(这一点,selectedImagePath,Toast.LENGTH_SHORT).show();
                    Log.i(selectedImagePath,selectedImagePath.trim());

                }

            }


        }
 

我得到了这个从日志猫:

  05-24 15:57:51.054:E / AndroidRuntime(18016):致命异常:主要
05-24 15:57:51.054:E / AndroidRuntime(18016):java.lang.RuntimeException的:不提供结果ResultInfo {谁= NULL,请求= 1,结果= -1,数据=意向{DAT =内容:// com.android.sec.gallery3d.provider / Picasa中/项目/ 5147009501910019474}}到活动{ncpl.talentapp / ncpl.talentapp.SignUp}:显示java.lang.NullPointerException
05-24 15:57:51.054:E / AndroidRuntime(18016):在android.app.ActivityThread.deliverResults(ActivityThread.java:2821)
05-24 15:57:51.054:E / AndroidRuntime(18016):在android.app.ActivityThread.handleSendResult(ActivityThread.java:2864)
05-24 15:57:51.054:E / AndroidRuntime(18016):在android.app.ActivityThread.access $ 1000(ActivityThread.java:122)
05-24 15:57:51.054:E / AndroidRuntime(18016):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1057)
05-24 15:57:51.054:E / AndroidRuntime(18016):在android.os.Handler.dispatchMessage(Handler.java:99)
05-24 15:57:51.054:E / AndroidRuntime(18016):在android.os.Looper.loop(Looper.java:132)
05-24 15:57:51.054:E / AndroidRuntime(18016):在android.app.ActivityThread.main(ActivityThread.java:4126)
05-24 15:57:51.054:E / AndroidRuntime(18016):在java.lang.reflect.Method.invokeNative(本机方法)
05-24 15:57:51.054:E / AndroidRuntime(18016):在java.lang.reflect.Method.invoke(Method.java:491)
05-24 15:57:51.054:E / AndroidRuntime(18016):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:844)
05-24 15:57:51.054:E / AndroidRuntime(18016):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
05-24 15:57:51.054:E / AndroidRuntime(18016):在dalvik.system.NativeStart.main(本机方法)
05-24 15:57:51.054:E / AndroidRuntime(18016):由:显示java.lang.NullPointerException
 

解决方案

从你的日志,它看起来像你试图挑选从Picasa文件夹 DAT =内容的图像://com.android.sec .gallery3d.provider / Picasa中/项目/ 5147009501910019474 ,必须将这些不同的处理,因为在 MediaStore.Images.Media.DATA 列数据将为他们空。 你可以看到如何正确地在这个环节处理从Picasa挑选图片:

http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/

只有你还需要处理开始的URI的内容://com.sec.android.gallery3d(我认为这对三星S3),以便更改

 如果(selectedImage.toString()startsWith(内容://com.google.android.gallery3d。))
 
Java中的空指针异常

 如果(_selectedImage.toString()startsWith(内容://com.google.android.gallery3d)
    || 。selectedImage.toString()startsWith(内容://com.sec.android.gallery3d))
 

我不知道是否有任何特殊场合(可能是)。

 public void uploadpicture(View view)
        {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent,
                    "Select Picture"), SELECT_PICTURE);
        }
        public void onActivityResult(int requestCode, int resultCode, Intent data)
            {

            if (resultCode == RESULT_OK)
                 {
                if (requestCode == SELECT_PICTURE) 
                     {

                    Uri selectedImageUri = data.getData();
                    selectedImagePath = getPath(selectedImageUri);
                    Toast.makeText(this,selectedImagePath,Toast.LENGTH_SHORT).show();
                    Log.i("selectedImagePath",selectedImagePath.trim());

                }

            }


        }

I got the this from Log-cat:

05-24 15:57:51.054: E/AndroidRuntime(18016): FATAL EXCEPTION: main
05-24 15:57:51.054: E/AndroidRuntime(18016): java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { dat=content://com.android.sec.gallery3d.provider/picasa/item/5147009501910019474 }} to activity {ncpl.talentapp/ncpl.talentapp.SignUp}: java.lang.NullPointerException
05-24 15:57:51.054: E/AndroidRuntime(18016):    at android.app.ActivityThread.deliverResults(ActivityThread.java:2821)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at android.app.ActivityThread.handleSendResult(ActivityThread.java:2864)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at android.app.ActivityThread.access$1000(ActivityThread.java:122)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1057)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at android.os.Handler.dispatchMessage(Handler.java:99)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at android.os.Looper.loop(Looper.java:132)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at android.app.ActivityThread.main(ActivityThread.java:4126)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at java.lang.reflect.Method.invokeNative(Native Method)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at java.lang.reflect.Method.invoke(Method.java:491)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
05-24 15:57:51.054: E/AndroidRuntime(18016):    at dalvik.system.NativeStart.main(Native Method)
05-24 15:57:51.054: E/AndroidRuntime(18016): Caused by: java.lang.NullPointerException

解决方案

From your log it looks like you are trying to pick an image from Picasa folder dat=content://com.android.sec.gallery3d.provider/picasa/item/5147009501910019474, and these must be handled differently, because data in MediaStore.Images.Media.DATA column will be null for them. You can see how to handle picking images from Picasa correctly at this link:

http://dimitar.me/how-to-get-picasa-images-using-the-image-picker-on-android-devices-running-any-os-version/

Only you also need to handle URIs that start with "content://com.sec.android.gallery3d" (I see this on Samsung S3) so change

if (selectedImage.toString().startsWith("content://com.google.android.gallery3d"))

to

if (_selectedImage.toString().startsWith("content://com.google.android.gallery3d") 
    || selectedImage.toString().startsWith("content://com.sec.android.gallery3d"))

I'm not sure if there are any more special cases (probably yes).