Android studio 从片段调用类的方法时出现问题
我在这里有两门课: #1个报警接收器Android studio 从片段调用类的方法时出现问题,android-studio,kotlin,android-fragmentactivity,Android Studio,Kotlin,Android Fragmentactivity,我在这里有两门课: #1个报警接收器 class AlarmReceiver: BroadcastReceiver() { ... fun setRepeatingAlarm(context: Context) {} //the method that i want to call } #2设置片段(附在设置活动上) 但我得到错误“在FragmentActivity类型的可空接收器上只允许安全(?)或非空断言(!!)调用”” 如何解决这个问题?谢谢:)活动属性实际上正在调用片段的getActi
class AlarmReceiver: BroadcastReceiver() {
...
fun setRepeatingAlarm(context: Context) {} //the method that i want to call
}
#2设置片段(附在设置活动上)
但我得到错误“在FragmentActivity类型的可空接收器上只允许安全(?)或非空断言(!!)调用””
如何解决这个问题?谢谢:)活动
属性实际上正在调用片段的getActivity()
方法,该方法可以返回null-片段可能处于创建状态,但实际上尚未附加到活动,因此,在这种情况下,该方法将返回null
您正在将另一个调用链接到结果上,因此因为它可能为null,所以您要么调用Activity.applicationContext
(好!),要么调用null.applicationContext
(非常糟糕!)。因此,警告告诉您正在这样做,您要么需要安全地处理潜在的空值(使用?。
调用),要么明确地说“当我调用它时,它肯定不会为空”(使用。
调用)
你应该仔细阅读,因为它很重要,而且它最终会让你的生活变得更轻松。但是在这种情况下(以及大多数情况下),您不应该使用
因为在某些情况下它不是真的,所以属性将为null,然后你的应用程序崩溃
以下是安全的处理方法:
activity?.let { alarmReceiver.setRepeatingAlarm(it.applicationContext) }
有很多方法可以编写,但这是最简单的理解-如果活动
不为null,它将运行let
块,将非null活动
作为一个名为it
的变量传入。然后你可以用同样的方式运行你的代码,因为现在你知道它不是空的!如果activity
为null,则该let
块将根本不会运行。你的警报不会被设置,但如果你的应用程序崩溃也不会被设置-你可以用这种方式处理它,或者如果这是一种罕见的不应该发生的情况,你可以什么都不做-它肯定不会因为NullPointerException
而崩溃 根据类型定义,activity
可以是null
。如果您确定此处不能为null
,请编写alarmReceiver.setRepeatingAlarm(activity!!.applicationContext)
alarmReceiver.setRepeatingAlarm(activity.applicationContext)
activity?.let { alarmReceiver.setRepeatingAlarm(it.applicationContext) }