Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin如何使用二级构造函数进行扩展_Kotlin - Fatal编程技术网

Kotlin如何使用二级构造函数进行扩展

Kotlin如何使用二级构造函数进行扩展,kotlin,Kotlin,我有一个助手类来获取网络更新。当我尝试创建二级构造函数时,它会抛出错误 基于kotlin中的文档,我需要扩展超类。但我也犯了同样的错误。 根据文档,ConnectionManager没有构造函数 我得到这个错误 Supertype initialization is impossible without primary constructor 我的助手班 class InternetConnectivityHelper : ConnectivityManager.NetworkCallback

我有一个助手类来获取网络更新。当我尝试创建二级构造函数时,它会抛出错误 基于kotlin中的文档,我需要扩展超类。但我也犯了同样的错误。 根据文档,ConnectionManager没有构造函数

我得到这个错误

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(){

    }
}
我也看了这个教程,但似乎无法让它工作

原因是根据文档,
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:尝试使用此代码(添加空检查并用列表替换数组)

对象RuntimePermissionUtil{
private var permissionList=mutableListOf()
趣味检索许可列表(上下文:上下文):列表{
context.getPackageManager().getPackageInfo(context.packageName,PackageManager.GET_PERMISSIONS)。requestedPermissions?let{
permissionList.clear()
permissionList.addAll(it)
}
//你的其他东西
返回许可证列表
}
}

我通过如下初始化值来解决此问题

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
    }
}
对象RuntimePermissionUtil{
private var permissionList:Array=emptyArray()
fun RetrievePermissionList(上下文:上下文):数组{
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())
}
返回许可证列表
}
}

这个代码对我很有用。崩溃的是您自己的代码(您没有共享)。@我更新了我的问题。我想我需要一种方法来检查空值我还得到了所有权限的列表,没有任何崩溃。你应该检查有关空安全的官方文档我如何检查requestedPermissions是否为空。。。我是否使用if(requestedPermissions!=null){}。。事实上,我认为这就是问题所在。我还没有权限列表。正如我所了解到的,如果我不管理它,kotlin也会在null上抛出错误。您应该使用
?。
运算符来处理可为null的变量。更新了我的答案
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
    }
}