Kotlin Как расширить с помощью вторичного конструктора - PullRequest
0 голосов
/ 10 октября 2019

У меня есть вспомогательный класс для получения сетевых обновлений. Когда я пытаюсь создать вторичный конструктор, он выдает ошибку, основываясь на документации в kotlin, мне нужно расширить суперкласс. Но я получаю ту же ошибку. Согласно документации, ConnectivityManager не имеет конструктора

Я получаю эту ошибку

Supertype initialization is impossible without primary constructor

Мой вспомогательный класс

class InternetConnectivityHelper : ConnectivityManager.NetworkCallback() {

    constructor(context: Context, internetStatusChangedListener: InternetStatusChangedListener): super(){

    }
}

Я также пытался на основе одного из ответов stackoverflow

class InternetConnectivityHelper : ConnectivityManager.NetworkCallback() {

    constructor(context: Context, internetStatusChangedListener: InternetStatusChangedListener): this(){

    }
}

Я также смотрю этот учебник, но, кажется, не могу заставить его работать https://www.youtube.com/watch?v=DmSLv-fX8PA&list=PLlxmoA0rQ-LwgK1JsnMsakYNACYGa1cjR&index=40

Ответы [ 2 ]

1 голос
/ 10 октября 2019

Причина в том, что requestedPermissions может быть нулевым в соответствии с документацией.

/**
 * Array of all {@link android.R.styleable#AndroidManifestUsesPermission
 * <uses-permission>} tags included under <manifest>,
 * or null if there were none.  This is only filled in if the flag
 * {@link PackageManager#GET_PERMISSIONS} was set.  This list includes
 * all permissions requested, even those that were not granted or known
 * by the system at install time.
 */
public String[] requestedPermissions;

Но ваша переменная permissionList безопасна для нулевого значения - вы не можете присвоить нулевое значение переменной, безопасной для нулевого значения.

UPD: попробуйте использовать этот код (добавлена ​​проверка нуля и массив заменен списком)

object RuntimePermissionUtil {
private var permissionList = mutableListOf<String>()

fun retrivePermissionList(context: Context) : List<String>{

    context.getPackageManager().getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS).requestedPermissions?.let {
        permissionList.clear()
        permissionList.addAll(it)
    }

    //your other stuff

    return permissionList
}
}
0 голосов
/ 10 октября 2019

Мне удается решить эту проблему путем инициализации значения, как показано ниже

object RuntimePermissionUtil {

    private var permissionList : Array<String> = emptyArray()

    fun RetrivePermissionList(context: Context) : Array<String>{

        if(context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS).requestedPermissions != null){
            permissionList = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS).requestedPermissions
        }

        if(LogConfiguration.RuntimePermissionEnabled){
            LogUtil.LOGD(LogConfiguration.RuntimePermission, "RetrievePermissionList : "+ permissionList.contentToString())
        }

        return permissionList
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...