接口 MultiplePermissionsListener 没有构造函数

Interface MultiplePermissionsListener does not have constructors

我正在尝试将 Dexter 库与 Kotlin 一起使用,但我遇到了以下问题:

在这个方法中,我的 MultiplePermissionsListener() 有一个错误,错误说:

Interface MultiplePermissionsListener does not have constructors

fun takeCameraImage() {
         Dexter.withActivity(this)
                .withPermissions(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .withListener(MultiplePermissionsListener() {
                    @Override
                    fun onPermissionsChecked(report: MultiplePermissionsReport) {
                        if (report.areAllPermissionsGranted()) {
                            fileName = System.currentTimeMillis().toString() + ".jpg"
                            val takePictureIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
                            takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, getCacheImagePath(fileName!!))
                            if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
                                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE)
                            }
                        }
                    }

                    @Override
                    fun onPermissionRationaleShouldBeShown(permissions: List<PermissionRequest>,token: PermissionToken) {
                        token.continuePermissionRequest();
                    }
                }).check();
     }

我对 Kotlin 没有什么经验,我不知道到底发生了什么,我不知道如何解决它,我需要一些帮助。

提前致谢

MultiplePermissionsListener 是一个接口,因此不能被实例化。您需要创建一个匿名 class,它使用所谓的对象表达式实现 MultiplePermissionsListener 接口。这很简单。替换

MultiplePermissionsListener()

object : MultiplePermissionsListener

有关详细信息,请参阅 https://kotlinlang.org/docs/reference/object-declarations.html#object-expressions。您还需要用 Kotlin override 关键字替换 @Override 注释,即代替

@Override
fun onPermissionRationaleShouldBeShown(permissions: List<PermissionRequest>,token: PermissionToken) {
    token.continuePermissionRequest();
}

你必须写

override fun onPermissionRationaleShouldBeShown(permissions: List<PermissionRequest>,token: PermissionToken) {
    token.continuePermissionRequest();
}

有关详细信息,请参阅 https://kotlinlang.org/docs/reference/classes.html#overriding-methods