Android Studio中ListView调用setAdapter出现空对象引用问题求助
异常信息:尝试在空对象引用上调用虚拟方法‘void android.widget.ListView.setAdapter(android.widget.ListAdapter)’
我的代码如下:list = (ListView) findViewById( R.id.simple_list ); String[] planets = new String[] { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranus", "Neptune"}; ArrayList<String> planetList = new ArrayList<String>(); planetList.addAll( Arrays.asList(planets) ); // Create ArrayAdapter using the planet list. listAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.food_menu, planetList); // Set the ArrayAdapter as the ListView's adapter. list.setAdapter( list...运行代码时触发上述异常,请问该如何排查解决?
Hey,这个空指针异常在Android开发里简直是家常便饭,咱们一步步拆解排查:
核对ListView的ID匹配度
你通过findViewById(R.id.simple_list)获取ListView,但大概率是布局文件里的ListView ID和这个不匹配。赶紧去检查你的XML布局文件,确认目标ListView的android:id属性确实是@+id/simple_list——注意拼写、大小写都不能错,Android的ID是严格区分大小写的!确认findViewById的调用时机
要是这段代码写在onCreate方法里,必须确保是在setContentView(R.layout.你的布局文件名)之后调用findViewById!如果先找控件再加载布局,那肯定找不到,返回的list就是null,调用setAdapter自然会炸。检查控件获取的上下文/组件是否正确
如果你是在Fragment里写的这段代码,可不能直接用findViewById,得换成getView().findViewById(R.id.simple_list)——因为Fragment的布局是在onCreateView里加载的,必须通过Fragment的视图对象来查找控件。排查布局嵌套或引用问题
如果你的ListView藏在多层ViewGroup(比如ScrollView、嵌套的LinearLayout)里面,或者是通过<include>标签引入的布局,那要确保查找控件时没有层级遗漏。可以试试用getWindow().findViewById来全局查找,或者确认include的布局已经正确加载。快速调试验证
在调用list.setAdapter之前加一行调试代码:Log.d("ListViewDebug", "ListView是否为空:" + (list == null));运行后看日志,如果输出
true,那核心问题就是ListView没被正确找到,回到前面几步逐一排查;如果是false,再去检查Adapter的初始化,但从你的代码来看,Adapter部分应该没问题,重点还是ListView为null的情况。
另外,你的代码最后一行list.setAdapter( list...看起来没写完,不过就算补全了,只要list是null就会触发异常,所以先解决list为null的核心问题就好。
内容的提问来源于stack exchange,提问作者GRANT JONES

