拍照时 Uri 必须不为 null 或为空

2024-01-01

我试图在按下 CircleImageView 时拍照,拍摄照片后裁剪它,然后开始上传到 Firebase,问题是我按下并且相机正确打开,但是当我拍照时应用程序崩溃,向我发送此错误Failure delivering result ResultInfo{who=null, request=65537, result=-1, data=Intent Uri must be non null or empty

我从这里开始设置 imageviewonClickListener启动相机,然后在下面ActivityResults我只是检查权限并保存选择的方法

private Uri  mImageUri = null;

  mProfileImageView = (ImageView) getActivity().findViewById(R.id.profileImageView);
        mProfileImageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (ActivityCompat.checkSelfPermission(getActivity(), "android.permission.CAMERA") == PackageManager.PERMISSION_GRANTED &&
                        ActivityCompat.checkSelfPermission(getActivity(), "android.permission.WRITE_EXTERNAL_STORAGE") == PackageManager.PERMISSION_GRANTED) {

                    cameraIntent();

                } else {
                    requestPerms();
                }


            }
        });

        mProgress = new ProgressDialog(getActivity());

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == CAMERA_REQUEST_CODE && resultCode == Activity.RESULT_OK) {

            mImageUri = data.getData();

            CropImage.activity(mImageUri)
                    .setGuidelines(CropImageView.Guidelines.ON)
                    .setAspectRatio(1, 1)
                    .start(getContext(), this);

        }

        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {

            CropImage.ActivityResult result = CropImage.getActivityResult(data);

            if (resultCode == Activity.RESULT_OK) {

                mImageUri = result.getUri();
                mImageBitmap = (Bitmap) data.getExtras().get("data");

                StorageReference filePath = mStorageUsers.child(mImageUri.getLastPathSegment());

                mProgress.setMessage("Estableciendo foto de perfil ...");
                mProgress.show();

                filePath.putFile(mImageUri)
                        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                                Uri downloadUri = taskSnapshot.getDownloadUrl();

                                mDatabaseUsers.child("profile_picture").setValue(downloadUri.toString());

                                mProfileImageView.setImageBitmap(mImageBitmap);

                                mProgress.dismiss();
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception e) {
                                mProgress.dismiss();

                                Toast.makeText(getActivity().getApplicationContext(), e.getClass().getSimpleName(), Toast.LENGTH_LONG).show();
                            }
                        });

            } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {

                Exception error = result.getError();
            }

        }

    }

相机触发

private void cameraIntent(){
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        startActivityForResult(intent, CAMERA_REQUEST_CODE);
    }

知道为什么会出现这个问题吗? 这是我的日志猫

06-14 16:32:05.126 4783-4783/com.app.myyapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                  Process: com.app.myyapp, PID: 4783
                                                                  java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=65537, result=-1, data=Intent { act=inline-data (has extras) }} to activity {com.app.myyapp/com.app.myyapp.FragmentMain}: java.lang.IllegalArgumentException: Uri must be non null or empty
                                                                      at android.app.ActivityThread.deliverResults(ActivityThread.java:4094)
                                                                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:4137)
                                                                      at android.app.ActivityThread.-wrap20(ActivityThread.java)
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1529)
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                      at android.os.Looper.loop(Looper.java:154)
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6123)
                                                                      at java.lang.reflect.Method.invoke(Native Method)
                                                                      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
                                                                      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:757)
                                                                   Caused by: java.lang.IllegalArgumentException: Uri must be non null or empty
                                                                      at com.theartofdev.edmodo.cropper.CropImage.activity(CropImage.java:358)
                                                                      at com.pholy.pholyapp.presentation.feed_user_images.view.PerfilFragment.onActivityResult(PerfilFragment.java:250)
                                                                      at android.support.v4.app.FragmentActivity.onActivityResult(FragmentActivity.java:164)
                                                                      at android.app.Activity.dispatchActivityResult(Activity.java:6931)
                                                                      at android.app.ActivityThread.deliverResults(ActivityThread.java:4090)
                                                                      at android.app.ActivityThread.handleSendResult(ActivityThread.java:4137) 
                                                                      at android.app.ActivityThread.-wrap20(ActivityThread.java) 
                                                                      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1529) 
                                                                      at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                      at android.os.Looper.loop(Looper.java:154) 
                                                                      at android.app.ActivityThread.main(ActivityThread.java:6123) 
                                                                      at java.lang.reflect.Method.invoke(Native Method)

Thanks


您的问题没有显示用于触发的代码CAMERA_REQUEST_CODE场景中onActivityResult().

假设是ACTION_IMAGE_CAPTURE,这不会给你一个Uri via data.getData()。反而:

  • 如果你把EXTRA_OUTPUT在你的ACTION_IMAGE_CAPTURE Intent,图像应该位于您指定的位置

  • 否则,你会得到一个Bitmap从...回来data.getParcelableExtra("data")

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拍照时 Uri 必须不为 null 或为空 的相关文章

随机推荐