Android:将操作系统版本更新为5.1.1时,Image Crop崩溃

前端之家收集整理的这篇文章主要介绍了Android:将操作系统版本更新为5.1.1时,Image Crop崩溃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我将我的nexus 5 Android操作系统版本更新为5.1.1,并更新了Google相机和Google相册应用程序.在此之后,当我尝试捕获图像并裁剪它时,我的应用程序崩溃并出现以下错误
FATAL EXCEPTION: main
Process: com.app.test,PID: 4857
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null,request=2,result=-1,data=Intent { typ=image/jpeg }} to activity {com.app.test/com.app.test.newActivity.activities.TestActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference
        at android.app.ActivityThread.deliverResults(ActivityThread.java:3574)
        at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
        at android.app.ActivityThread.access$1300(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        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:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.os.Parcelable android.os.Bundle.getParcelable(java.lang.String)' on a null object reference
        at com.app.test.newActivity.activities.TestActivity.onActivityResult(TestActivity.java:127)
        at android.app.Activity.dispatchActivityResult(Activity.java:6192)
        at android.app.ActivityThread.deliverResults(ActivityThread.java:3570)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:3617)
at android.app.ActivityThread.access$1300(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1352)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
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:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

以前它工作正常.我使用的代码如下:

图像捕获代码

try {
    Intent imageCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    if (imageCapture.resolveActivity(getContext().getPackageManager()) != null) {
        imageCapture.putExtra(MediaStore.EXTRA_OUTPUT,Uri.fromFile(new File(Environment.getExternalStorageDirectory().getAbsolutePath() + Constants.image_path)));
        startActivityForResult(imageCapture,Constants.CAMERA_IMAGE_CAPTURE);
    }
} catch (ActivityNotFoundException anfe) {
    Toast.makeText(getContext(),"device doesn't support capturing images!",Toast.LENGTH_SHORT).show();
}

图像裁剪代码

@Override
    protected void onActivityResult(int requestCode,int resultCode,Intent intent) {
        super.onActivityResult(requestCode,resultCode,intent);
        if (resultCode == RESULT_OK) {
            if (requestCode == CAMERA_IAMGE_CROP) {
                Bundle extras = intent.getExtras();//intent.getExtras() is always returns NULL here         
                Bitmap thePic = extras.getParcelable("data");
                //setImageOnImageView(thePic);
            } else if (requestCode == Constants.CAMERA_IMAGE_CAPTURE)) {
                processCapturedImage();
            }
        }
    }

    private void processCapturedImage() {
        try {
            String path = Environment.getExternalStorageDirectory().getAbsolutePath() + Constants.image_path;
            File file = new File(path);
            if (file.exists()) {
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inPreferredConfig = Bitmap.Config.RGB_565;
                Bitmap bm = BitmapFactory.decodeFile(path,options);
                int rotate = AndroidUtils.getRotateValue(file.getAbsolutePath());
                if (rotate != 0) {
                    Debug.print("Profile pic rotation value is not 0.");
                    /****** Image rotation ****/
                    Matrix matrix = new Matrix();
                    matrix.postRotate(rotate);
                    bm = Bitmap.createBitmap(bm,bm.getWidth(),bm.getHeight(),matrix,true);
                }
                picUri = getImageUri(getApplicationContext(),bm);
                performCropAction();
            } else {
                Tools.showToast(EditProfileActivity.this,"Error occurred,please try again.");
            }
        } catch (Exception e) {
            Debug.printException(e);
        }
    }

    private void performCropAction() {
        try {
            Intent cropAction = new Intent("com.android.camera.action.CROP");
            cropAction.setDataAndType(picUri,"image/*");
            cropAction.putExtra("crop","true");
            cropAction.putExtra("aspectX",1);
            cropAction.putExtra("aspectY",1);
            cropAction.putExtra("outputX",AS.getInPixels(100));
            cropAction.putExtra("outputY",AS.getInPixels(100));
            cropAction.putExtra("return-data",true);
            startActivityForResult(cropAction,CAMERA_IAMGE_CROP);
        } 
        catch (ActivityNotFoundException anfe) {
            Toast.makeText(this,"your device doesn't support the crop action!",Toast.LENGTH_SHORT).show();
        }
    }

如你看到的,
Bundle extras = intent.getExtras();
这里的intent.getExtras()始终返回NULL.

任何帮助真的很感激!
谢谢.

解决方法

以上android 5.0裁剪功能在onActivityResult中返回URI,因此请相应地使用手机版本处理它.
Bitmap selectedBitmap;
if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
Bundle extras = data.getExtras();
selectedBitmap = extras.getParcelable("data");
}
else{
Uri uri = data.getData(); 
selectedBitmap=MediaStore.Images.Media.getBitmap(this.getContentResolver(),uri);
}

希望这可以帮助!

猜你在找的Android相关文章