Интерфейс MultiplePermissionsListener не имеет конструкторов - PullRequest
0 голосов
/ 22 сентября 2019

Я пытаюсь использовать библиотеку Декстер с Kotlin, и у меня возникает следующая проблема:

В этом методе у меня возникает ошибка с MultiplePermissionsListener (), ошибка говорит:

Интерфейс MultiplePermissionsListener не имеет конструкторов

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, и я не знаю, что именно может происходить, я не знаюкак это исправить, я мог бы использовать некоторую помощь.

Заранее спасибо

1 Ответ

1 голос
/ 22 сентября 2019

MultiplePermissionsListener является интерфейсом и, следовательно, не может быть создан.Вам необходимо создать анонимный класс, который реализует интерфейс MultiplePermissionsListener, используя так называемое объектное выражение.Это просто.Замените

MultiplePermissionsListener()

на

object : MultiplePermissionsListener

Подробнее см. https://kotlinlang.org/docs/reference/object-declarations.html#object-expressions.Вам также необходимо заменить аннотации @Override на ключевое слово Kotlin 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для получения дополнительной информации.

...