Android中,intent初始化为什么不能写在方法外面呢?
初学者。今天写一个活动之间跳转的代码,用到了显式的intent,但是我在类中定义了一个intent的成员变量,在方法中使用时候,程序却崩溃了,这是为什么呢?
public class MusicPlay extends Activity{
//下面这一句初始化出了错误
public Intent intent=intent=new Intent(this,MusicServer.class);
....
如上代码,但是错误信息提示是:
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.content.Context.getPackageName()' on a null object reference
据说是在“空对象引用”上调用getPackageName()虚方法出现了错误。
起初,我以为是不是this是空从而导致问题,修改了代码:
public class MusicPlay extends Activity{
Intent intent;
public MusicPlay(){
super();
if(this!=null){
intent=new Intent(this,MusicServer.class);
}
}
....
但是仍然出现了错误,错误信息还是一样的。通过条件判断我知道this不为空,那么为什么还说是空引用呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
Activity
是ContextWrapper
的子类, 所以我们先找到并打开ContextWrapper.java
源码, 关键代码如下:ContextWrapper
里基于Context
的调用都是直接使用mBase
来间接实现调用的. 那么这个mBase
是什么时候被赋值的呢? 找到并打开ActivityThread.java
, 就能找到它被赋值的代码部分, 关键代码如下:以上, 可知: 实例化
Activity
时,ContextWrapper#getBaseContext()
返回的是null, 因此, 不能在构造函数或者构造成员变量时直接调用与Context
相关的任何函数和类的实例化. 如果需要, 则在其生命周期函数中去调用.你的类继承了Activity类,那么它就有生命周期,所有逻辑都在这几个生命周期里面进行,换而言之,你的逻辑代码都要写在那几个生命周期的方法里面.一般来说,都是重写onCreate的方法,在那里面写页面跳转.你的方法的标识符命名也不规范
要重写onCreate()方法啊