如果我不选择任何图片,然后单击后退按钮,它坠毁

问题描述:

错误消息:如果我不选择任何图片,然后单击后退按钮,它坠毁

FATAL EXCEPTION: main 
Process: com.example.keepair.myapplication, PID: 31796 
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=66536, result=0, data=null} to activity {com.example.keepair.myapplication/com.example.keepair.myapplication.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.net.Uri android.content.Intent.getData()' on a null object reference 

CODE:

mGetImageFromGalleryButton = (Button) view.findViewById(R.id.btn_getgallery); 
    mGetImageFromGalleryButton.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if(ActivityCompat.checkSelfPermission(getActivity(), 
          Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 
        { 
         requestPermissions(
           new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 
           2000); 
        } 
        else { 
         startGallery(); 
        } 
       } 
      }); 

    private void startGallery() { 
     Intent cameraIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
     cameraIntent.setType("image/*"); 
     if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) { 
      startActivityForResult(cameraIntent, 1000); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if(resultCode == Activity.RESULT_OK) { 
      if(requestCode == 1000){ 
       Uri returnUri = data.getData(); 
       Bitmap bitmapImage = null; 
       try { 
        bitmapImage = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), returnUri); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
       mImageview.setImageBitmap(bitmapImage); 
      } 
      returnUri = data.getData(); 
      Glide.with(this) 
       .load(returnUri) 
       .override(1280, 1280) 
       .centerCrop() 
       .crossFade() 
       .into(mImageview); 
     } 
     else { #What is good for this space? } 
    } 

我的代码做什么,如果用户点击mGetImageFromGalleryButtonGalleryFragment,用户可以去图库并选择一张图片,然后回到GalleryFragment与该图片的uri。

问题: 如果用户点击mGetImageFromGalleryButton等去画廊,但不要选择任何图片,然后在Android后退按钮时,Error message我上面说的发生了。所以,我想我必须修改public void onActivityResult的if子句。如果我认为是正确的,有什么好的else { #What is good for this space? }你能帮助我吗?

+2

我认为这是乌里通过returnUri = data.getData();这是导致崩溃的线路 – myatmins

+0

@ septemberboy7感谢您的咨询! –

+1

当没有选择任何内容时,捕获返回的空数据;编写好代码的一部分是处理空值 – Eenvincible

当您不选择任何图像时,数据为空。这就是它给出错误的原因。如果您的数据不为空,请在您的代码周围添加条件。

E.g

if(data != null){ 

    //Proceed with your image crop etc 

} 
+0

谢谢。 Saadi –

+0

@ H.fate欢迎您。 – Saadi

@Override public void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    Uri returnUri = data.getData(); 
    switch (requestCode) 
    { 
    case 1000: 
    if (resultCode == RESULT_OK && returnUri != null) 
    { 
     Bitmap bitmapImage = null; 
     try 
     { 
      bitmapImage = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), returnUri); 
     } 
     catch (IOException e) 
     { 
      e.printStackTrace(); 
     } 
     mImageview.setImageBitmap(bitmapImage); 
     Glide.with(this) 
     .load(returnUri) 
     .override(1280, 1280) 
     .centerCrop() 
     .crossFade().into(mImageview); 
    } 
    break; 

    default: 
    super.onActivityResult(requestCode, resultCode, data); 
    break; 
    } 
}//onActivityResult 
+0

谢谢你的回答,乔恩古德温。 –

+1

您又犯了错误,data.getData()中的数据为null时发生异常。你必须检查数据 –

+1

@Joyal C约瑟不,我不这么认为,你发现了什么吗?我认为我只对returnUri做了次要引用,这是可以的(&& returnUri!= null)括号和all /; O)再次阅读代码! –