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