2016-09-24 7 views
1

エラーメッセージが墜落:、それは

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? } 
    } 

私のコードは、ユーザーがmGetImageFromGalleryButtonをクリックすることをやっていますGalleryFragment、ユーザーはギャラリーに行って1つの画像を選択してから、その画像のURIと共にGalleryFragmentに戻ることができます。

質問:ユーザーがmGetImageFromGalleryButtonをクリックして、そのギャラリーに行くが、任意の画像を選択し、Androidの戻るボタンをクリックしない場合 、私は上記の言っError messageが起こっています。だから、私はpublic void onActivityResultのif節を修正する必要があると思う。もし私が正しいと思ったら、何が良いですかelse { #What is good for this space? }あなたは私を助けてくれますか?

+2

私はそれがウリreturnUri = data.getData(だと思います)。クラッシュを引き起こしている行 – myatmins

+0

@ septemberboy7あなたの助言をありがとう! –

+1

何も選択されていないときに返されるnullデータをキャッチします。良いコードを書いている部分がNULLを扱っています – Eenvincible

答えて

1

イメージを選択しないと、データはnullになります。それがエラーを出す理由です。データがnullでない場合は、コードの周囲に条件を設定します。

例えば

if(data != null){ 

    //Proceed with your image crop etc 

} 
+0

ありがとうございます。 Saadi –

+0

@ H.fateあなたは大歓迎です。 – Saadi

2
@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

Jon Goodwinさん、ありがとうございました。 –

+1

あなたはもう一度間違いを犯しました。データがnullのdata.getData()で例外が発生しました。あなたはデータを確認する必要があります –

+1

@ジョイアルCジョセフ私はそうは思わない、あなたは何かを見つけましたか?私はreturnUriの2番目の参照のみを行うと思います。これはokです(&& returnUri!= null)大括弧とすべて/; O)ベストコードをもう一度読んでください! –