Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.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
Android 如果变量是用lateinit或合成扩展名初始化的,是否可能有NPE?_Android_Exception_Kotlin_Nullpointerexception - Fatal编程技术网

Android 如果变量是用lateinit或合成扩展名初始化的,是否可能有NPE?

Android 如果变量是用lateinit或合成扩展名初始化的,是否可能有NPE?,android,exception,kotlin,nullpointerexception,Android,Exception,Kotlin,Nullpointerexception,如果变量是用lateinit初始化的,是否可能有NPE 1/lateinit变量pbar:ProgressBar 2/pbar=findviewbydr.id.pbar\u登录 3/进行api调用,pbar.visibility=View.VISIBLE 4/按Back并销毁活动假设所有视图也将被销毁 5/ 问题: 1如果我不检查-如果pbar!=空的 2同样的问题如果变量是通过合成扩展生成的,是否会有NPE 我经历了一个问题,在这种情况下,我进一步的问题是 在activity、fragment

如果变量是用lateinit初始化的,是否可能有NPE

1/lateinit变量pbar:ProgressBar

2/pbar=findviewbydr.id.pbar\u登录

3/进行api调用,pbar.visibility=View.VISIBLE

4/按Back并销毁活动假设所有视图也将被销毁

5/

问题:

1如果我不检查-如果pbar!=空的

2同样的问题如果变量是通过合成扩展生成的,是否会有NPE

我经历了一个问题,在这种情况下,我进一步的问题是

在activity、fragments或recyclerview中,是否有避免视图相关变量出现NPE的最佳实践

如果我不检查-如果pbar!=空的

不可以。该属性不能为空

但是,无论如何,您都可能崩溃。不要试图修改已销毁的活动,包括更新其视图。要么:

使用LiveData之类的内容告诉活动有关事件的信息,这样,如果活动在附近,则活动可以响应事件,但如果活动被破坏,则可以忽略事件;或

检查是否被破坏,看看它是否被破坏,在尝试更新它的视图之前,也要考虑ISWORD,因为你可能不必麻烦查看视图更新< /P> 在这两种方法中,我强烈推荐前一种方法,作为替换AsyncTask的一部分

同样的问题,如果变量是通过合成扩展生成的,会有NPE吗


不,它不能为null,但您仍然可以崩溃,请参见上文。

您的问题不是lateinit变量,而是活动生命周期。在活动被销毁后执行ui作业是不好的。有很多方法可以让它工作,rxjava,couroutines,livedata,presenter。谢谢你的理论答案。然而,我正在为一个典型的用例寻找一个更精确的解决方案,其中有一个API调用,用户按下后退按钮,现在,如何防止NPE?目前,我们正在使用基于自定义订阅的逻辑来防止NPE。既然我们正在将代码迁移到Kotlin,您是否建议使用改型+协同程序+合成扩展的API调用来防止NPE?@Chitrang:再次强调,NPE不是您的问题,至少不是直接的问题。非null属性或变量不能为null。但是,如果在异步工作完成时活动已被销毁,即使对视图对象的引用不会为null,它们仍可能导致崩溃。你有什么建议吗?我在回答中提到了这一点。说明了我提到的LiveData方法,以及改进和协同程序。
override fun onPostExecute() {
    if (pbar != null) { // warning: pbar != null is always true
        pbar.visibility = View.GONE // NPE??
    }
}