【问题标题】:Android studio app crashes when closing image crop activity关闭图像裁剪活动时,Android Studio 应用程序崩溃
【发布时间】:2021-03-18 02:09:57
【问题描述】:

我使用这个库在 Android Studio 中裁剪图像:https://github.com/ArthurHub/Android-Image-Cropper

我可以上传照片并将其发送到我的 Firebase 存储,但是当我打开裁剪工具并按返回箭头退出时,应用程序崩溃了。错误是:

原因:java.lang.IllegalStateException:结果不能为空

第 4 行的“var uri = result.uri”中的错误引用了我的代码

我的代码:

 override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)

    var result = CropImage.getActivityResult(data)
    var uri = result.uri

    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        val bitmap = MediaStore.Images.Media.getBitmap(context?.contentResolver, uri)
        imageView12.setImageBitmap(bitmap)
    }
    if (uri != null) {
        val ref = storageReference!!.child("" + UUID.randomUUID())
        ref.putFile(uri!!)
                .addOnSuccessListener {
                    ref.downloadUrl.addOnSuccessListener { uriLink ->
                        currentUser.profileImage = uriLink.toString()
                        saveData()
                        progressDialog.dismiss()
                        Toast.makeText(activity, "Uploaded", Toast.LENGTH_SHORT)
                                .show()
                    }
                }
                .addOnFailureListener { e ->
                    progressDialog.dismiss()
                    Toast.makeText(activity, "Failed " + e.message, Toast.LENGTH_SHORT)
                            .show()
                }
                .addOnProgressListener { taskSnapshot ->
                    val progress = 100.0 * taskSnapshot.bytesTransferred / taskSnapshot
                            .totalByteCount
                    progressDialog.setMessage("Uploaded " + progress.toInt() + "%")
                }
    }

}

我开始裁剪活动:

context?.let {
        CropImage.activity()
            .setGuidelines(CropImageView.Guidelines.ON)
            .setAspectRatio(1, 1)
            .start(it, this)
    };

我该如何解决这个问题?

【问题讨论】:

  • 嘿,您为裁剪共享的库给出了如何从 CropImage Activity 获取数据的正确解释,请再次查看该自述文件,您会找到解决方案。
  • 我确实看过并尝试了他们的代码,您认为解决方案是什么?
  • if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) 应该在 var result = CropImage.getActivityResult(data) 行之上

标签: android firebase kotlin android-activity firebase-storage


【解决方案1】:

CropImage.getActivityResult(data) can return null 因此您需要在尝试访问其uri 属性之前对result 进行空检查。您正在检查uri 下方的空值,因此如果可以为空值,您可以执行var uri = result?.uri

如果可以的话,也可以将其设为val,它可以让您在处理可能更改的内容时省去很多麻烦,尤其是在它可以为空的情况下!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多