《安卓应用开发学习》——关于使用ExpandableListView.setAdapter()方法发生空指针异常

导读:本篇文章讲解 《安卓应用开发学习》——关于使用ExpandableListView.setAdapter()方法发生空指针异常,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

先贴出异常日志

03-06 23:39:51.101: E/AndroidRuntime(22049): FATAL EXCEPTION: main
03-06 23:39:51.101: E/AndroidRuntime(22049): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xiangan.qq_client/com.xiangang.qq_client.MainQQActivity}: java.lang.NullPointerException
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2004)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2029)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.ActivityThread.access$700(ActivityThread.java:123)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1178)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.os.Looper.loop(Looper.java:137)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.ActivityThread.main(ActivityThread.java:4587)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at java.lang.reflect.Method.invokeNative(Native Method)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at java.lang.reflect.Method.invoke(Method.java:511)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at dalvik.system.NativeStart.main(Native Method)
03-06 23:39:51.101: E/AndroidRuntime(22049): Caused by: java.lang.NullPointerException
03-06 23:39:51.101: E/AndroidRuntime(22049):  at com.xiangang.qq_client.MainQQActivity.initView(MainQQActivity.java:231)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at com.xiangang.qq_client.MainQQActivity.onCreate(MainQQActivity.java:67)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.Activity.performCreate(Activity.java:4730)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1968)
03-06 23:39:51.101: E/AndroidRuntime(22049):  … 11 more

根据这两行找到运行代码代码
03-06 23:39:51.101: E/AndroidRuntime(22049):  at com.xiangang.qq_client.MainQQActivity.initView(MainQQActivity.java:231)
03-06 23:39:51.101: E/AndroidRuntime(22049):  at com.xiangang.qq_client.MainQQActivity.onCreate(MainQQActivity.java:67)

  expandableListView.setAdapter(userAdapter);然后这行代码在initView()里面;

分析原因,异常告诉我们是空指针异常,那我们就设置断点到进行调试或者直接打印expandableListView的值,发现它为空,不是适配器userAdapter的问题。然后去布局文件查看expandableListView的id,发现也没有错。而且在Activity里也声明了。那么问题出现在哪呢?去到initView()查看代码。因为我是要把ExpandableListView布局到ViewPager其中一个View中,所以我们去看这两行代码:

expandableListView = (ExpandableListView)findViewById(R.id.userlistview);

view2 = layoutInflater.inflate(R.layout.qq_list, null);这个是加载布局文件到view2,我们在view2上显示ExpandableListView。

结果我们发现第一行代码编写在第二行代码之前(代码顺序),这样的话会不会在view2加载R.layout.qq_list之前就使用findVIewById会使expandableListView即使获取到但也是null呢(对于view2来说)?因为我们是把R.layout.qq_list加载到view2中,那么view2就作为了expandableListView的上下文Context,但是我们是在MainActivity中获取,默认的是Context不是view2.这样获取到的expandableListView自然是null值。所以我们把这两代码对调位置,把第一行的Context改成view2.结果如下:

view2 = layoutInflater.inflate(R.layout.qq_list, null);

expandableListView = (ExpandableListView)view2.findViewById(R.id.userlistview);

调试运行,成功!

总结:在使用findViewById()方法时,一定要注意你所使用的控件所在的上下文Context,这样可以避免很多麻烦。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/116904.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!