findViewById返回Null

简介:

10-04 17:43:05.400: E/AndroidRuntime(7135): Caused by: java.lang.NullPointerException
10-04 17:43:05.400: E/AndroidRuntime(7135): at com.solar.LoginActivity.initView(LoginActivity.java:35)
10-04 17:43:05.400: E/AndroidRuntime(7135): at com.solar.LoginActivity.onCreate(LoginActivity.java:17)
10-04 17:43:05.400: E/AndroidRuntime(7135): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
10-04 17:43:05.400: E/AndroidRuntime(7135): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
10-04 17:43:05.400: E/AndroidRuntime(7135): ... 11 more

 

 

如下所示,是提示错误的OnCreate函数。

1 protected void onCreate(Bundle savedInstanceState) {
2         super.onCreate(savedInstanceState);
3         Button btnLogin = (Button) findViewById(R.id.login_btn_login);                     //这里出错
4         this.setContentView(R.layout.login_page);
5     }

 

NullPointerException?找了好久,搞不清楚为什么出现这个错误。因为这句话怎么也看不出错误。布局文件里面也确实有login_btn_login这个按钮。

Button btnLogin = (Button) findViewById(R.id.login_btn_login);

后面终于想到:整个Activity都还没有渲染R.layout.login_page这个布局文件呢。怎么能要求他在R.layout.login_page这个布局文件里面找到按钮呢。所以返回的是null。

 

终于找到一段更好的解释:

当activity 调用 setContentView() 时,android 才会去绘制 layout 上的各个元素,并为其分配内存。只有 分配了内存以后,才能继续执行 ,findViewById(); 才能得到引用,不然得到空引用。

空引用意味着,后面使用相应变量时就会发生访问的对象不存在的问题。

而且当Activity重新setContentView()以后,那些之前绘制的控件,内存都被灭掉了。

所以,若是通过setContentView 来达到画面切换目的的,要注意重新绘制以后重新取得引用。

 

原文链接

本文转自陈哈哈博客园博客,原文链接http://www.cnblogs.com/kissazi2/archive/2012/10/04/2711812.html如需转载请自行联系原作者

kissazi2
相关文章
|
Android开发
Android基于Window.ID_ANDROID_CONTENT给定id添加子View
Android基于Window.ID_ANDROID_CONTENT给定id添加子View 这一技术特点在一些视频播放器中比较有用。
1367 0
|
Android开发
Android TextView.setText() 实现字符串(String)+数值(Integer)作为参数
Android TextView.setText() 实现字符串(String)+数值(Integer)作为参数
|
Java Android开发 Python
RecyclerView实现多type页面
目录介绍 01.先看看实际需求 02.adapter实现多个type 03.这样写的弊端 04.如何优雅实现adapter封装 好消息 博客笔记大汇总【16年3月到至今】,包括Java基础及深入知识点,Android技术博客,Python学习笔记等等,还包括平时开发中遇到的bug汇总,当然也...
994 0
|
索引
Android--listView中的button控件获取item的值
版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/chaoyu168/article/details/55253877 在listv...
1235 0
|
Android开发
Android 初始化Menu item的值(ActionBar篇)
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
854 0
|
Android开发
RecyclerView不同类型Item的展示
代码如下:   public class AccessoiresAdapter extends RecyclerView.Adapter { final int VIEW_TYPE_ACCESSORY = 0; final int VIEW_TYPE_ACCESSORY_SP...
986 0