如果变量是用延迟初始化的,是否有可能具有 NPE?
1/ lateinit var pbar: ProgressBar
2/pbar = findViewById(r . id . pbar _ log in)
3/进行api调用,pbar。可见性=视图.VISIBLE
4/按下并销毁活动(假设所有视图也将被销毁)
5/
override fun onPostExecute() {
if (pbar != null) { // warning: pbar != null is always true
pbar.visibility = View.GONE // NPE??
}
}
问题:
1)如果我不检查- if (pbar!= null)?
2)同样的问题如果变量是通过合成扩展生成的,会有NPE吗?
我已经经历了这个问题,在这种情况下,我进一步的问题是,
对于活动、片段或回收视图中的视图相关变量,有没有避免NPE的最佳实践?
如果我不检查-if(pbar!=null),是否可以获得NPE?
不可以。该属性不能为null
。
但是,无论如何您都可能崩溃。不要尝试修改已销毁的活动,包括更新其视图。要么:
>
使用类似 LiveData
之类的内容来告知活动有关事件的信息,以便活动可以在活动存在时响应事件,但如果活动被破坏,则可以忽略该事件,或者;
在尝试更新其视图之前,检查活动上的isDestroed
以查看它是否已被销毁(也请考虑isFinishing
,因为您可能无论如何都不需要为视图更新而烦恼)
在这两种方法中,我强烈建议使用前一种方法,作为替换 AsyncTask
的一部分。
同样的问题是,如果变量是通过综合扩展生成的,那么会有NPE吗?
不,它不能为null
,但无论如何都可以崩溃(请参见上文)。
因为我是android开发新手,所以我不知道如何在使用lateinit变量之前初始化它。在此之前,我尝试过执行,就像这个github中提到的,但没有成功。所以现在我希望问题出在初始化textInput变量上。
我想知道是否有一种方法可以检查变量是否已经初始化。例如:
我想知道是否有办法检查变量是否已初始化。例如:
在最后一行显示为时出错 :::: 变量结果可能尚未初始化 这是我的代码:
我正在将一个项目从java迁移到kotlin,该项目使用了许多可能为空的变量,并且在与用户或外部作业进行一些交互之前不会初始化它们。 我试图使用kotlin null安全优势,并且我试图避免在源代码中使用<code>nulllateinitvar location:location?=空 我这样做是为了避免使用< code >?每次我需要使用这些变量时。现在的问题是...如果变量没有初始化会发生什
问题内容: 当我尝试编译时: 我得到这些错误: 在我看来,我在方法的顶部初始化了它们。怎么了 问题答案: 你声明了它们,但没有初始化它们。初始化它们是将它们设置为等于一个值: 因为未初始化变量,但在循环中增加了变量(例如),所以会收到错误消息。 Java原语具有默认值,但如下一位用户所述 当声明为类成员时,它们的默认值为零。局部变量没有默认值