栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

2021-10-16

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-16

Attempt to invoke virtual method ‘…’ on a null object reference

遇到了两次这样的提示,逐个解析之。

一、只声明,未创建。如下代码:

public class SortMallFragment extends Fragment {
    ... ...
    private ArrayList rightFragments; 
    
    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        //rightFragments = new ArrayList<>();
        for (int i = 0; i < leftTitles.length; i++){      
        rightFragments.add(RightSortMallFragment.newInstance(leftTitles[i],"0"));
        }
     ... ...
    }
}

错误提示为:Attempt to invoke virtual method ‘boolean java.util.ArrayList.add(java.lang.Object)’ on a null object reference,即:尝试在空对象引用上调用虚拟方法“boolean java.util.ArrayList.add(java.lang.Object)”。
主要原因对象rightFragments只声明,未创建,是空的(null),当调用其add()方法时,就不符合逻辑了。改正方法就是将上述代码中的双斜杠去掉,即创建一下对象就可以了。

二、循环过程中无法生成对象。如下代码:

        for (int i = 0; i<5; i++){
            LinearLayout v0 = (LinearLayout) tabLayout.getChildAt(i); 
            LinearLayout v1 = (LinearLayout) v0.getChildAt(0);                                
                ... ...  
        }

若tabLayout中只有2个子项,而循环要进行5轮。等循环到第3轮时,v0就是一个空对象,调用其getChildAt()方法,试图从里面拿出些什么,恐怕什么也拿不出来,所以报错:
Attempt to invoke virtual method ‘android.view.View android.view.ViewGroup.getChildAt(int)’ on a null object reference
这时虽然语法不错,但逻辑肯定有问题,应朝这个方向寻找问题。

三、小结
出现“Attempt to invoke virtual method ‘…’ on a null object reference”提示,首先说明有一个空对象,其次还要调用这个对象的方法,代码形如:“空对象.方法()”。这好比还没发工资,就拿着“钱影子”去买东西,逻辑上很荒谬。解决的方向应该是仔细研究这个“空对象”的由来。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号