2017-01-09 5 views
0

に仮想メソッド「はjava.lang.String型android.net.Uri.getSchemeを()」を呼び出すしようとすると、私はギャラリーから画像をロードし、Android Image Cropper驚くべき例外:nullのオブジェクト参照

マイonActivityResultを使用して、それをトリミングしていますメソッドコード

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (resultCode == Activity.RESULT_OK) { 

      if (requestCode == CHOOSE_IMAGE) { 

       CropImage.activity (data.getData ()) 
         .setGuidelines (CropImageView.Guidelines.ON) 
         .start (this); 

      } else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) { 
       Uri imageUri = getPickImageResultUri (data); 

       // For API >= 23 we need to check specifically that we have permissions to read external storage, 
       // but we don't know if we need to for the URI so the simplest is to try open the stream and see if we get error. 
       boolean requirePermissions = false; 
       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && 
         checkSelfPermission (Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && 
         isUriRequiresPermissions (imageUri)) { 

        // request permissions and handle the result in onRequestPermissionsResult() 
        requirePermissions = true; 
        mCropImageUri = imageUri; 
        requestPermissions (new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 0); 
       } 


       if (!requirePermissions) { 

       } 

     mCropImageUri = imageUri; 
       try { 
        Bitmap bitmap = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver() , mCropImageUri); 

       mCropImageView.setImageBitmap (bitmap); 

       } catch (IOException e) { 
        e.printStackTrace (); 
       } 
//    mImageLoader.displayImage (String.valueOf (mCropImageUri),mUiCircularImage,options); 

      } 
     } 
    } 

すべてが素晴らしいです。

resultCodeはOKです。

requestCodeで結構です

Dataがnullでない

ImageUri

file:///storage/emulated/0/Android/data/com.hey.heypickup/cache/pickImageResult.jpeg 

が、私は例外を取得するコード

Bitmap bitmap = MediaStore.Images.Media.getBitmap(getApplicationContext().getContentResolver() , mCropImageUri) 

の下に使用するビットマップにURIの上に変換したいとき

FATAL EXCEPTION: main 
        Process: com.hey.heypickup, PID: 21994 
        java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=203, result=-1, data=Intent { (has extras) }} to activity {com.hey.heypickup/com.hey.heypickup.Activities.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 
         at android.app.ActivityThread.deliverResults(ActivityThread.java:3790) 
         at android.app.ActivityThread.handleSendResult(ActivityThread.java:3833) 
         at android.app.ActivityThread.access$1700(ActivityThread.java:152) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:135) 
         at android.app.ActivityThread.main(ActivityThread.java:5538) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at java.lang.reflect.Method.invoke(Method.java:372) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
        Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.net.Uri.getScheme()' on a null object reference 
         at android.content.ContentResolver.openInputStream(ContentResolver.java:641) 
         at android.provider.MediaStore$Images$Media.getBitmap(MediaStore.java:849) 
         at com.hey.heypickup.Activities.MainActivity.onActivityResult(MainActivity.java:128) 
         at android.app.Activity.dispatchActivityResult(Activity.java:6238) 
         at android.app.ActivityThread.deliverResults(ActivityThread.java:3786) 
         at android.app.ActivityThread.handleSendResult(ActivityThread.java:3833)  
         at android.app.ActivityThread.access$1700(ActivityThread.java:152)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1390)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:135)  
         at android.app.ActivityThread.main(ActivityThread.java:5538)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at java.lang.reflect.Method.invoke(Method.java:372)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:960)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  

ので、それをthatsの...

+0

の可能性のある重複した[アンドロイド:カメラのテントを使用しているアプリケーションはonActivityResultにクラッシュ](HTTPこのテストはfalseであれば特に

、あなたはそれに値を代入し、あなたの問題のコードを持っていません://stackoverflow.com/questions/34504717/android-app-crashes-on-onactivityresult-using-camera-intent) –

+0

@juan Cruz私の場合は何もnullでギャラリーから画像を取得しています –

+0

あなたは更新できますかgetPickImageResultUri()およびisUriRequiresPermissions()メソッドのコード? – rogerwar

答えて

1

mCropImageUrinullです。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && 
        checkSelfPermission (Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && 
        isUriRequiresPermissions (imageUri))