关于android中的” unable to instantiate activity componentinfo"的错误

本文分析了Android中出现'Unable to instantiate activity ComponentInfo'错误的原因,重点在于MainActivity实例化过程中,对OnClickListener初始化导致的NullPointerException。解释了在类实例化阶段,使用'MainActivity.this'作为上下文会引发空指针异常的问题,并提醒开发者注意此类错误的发生。
摘要由CSDN通过智能技术生成

一、先贴上代码

     以下代码的作用是,为其所在的MainActivity类的两个按键指定按键响应函数。

    private OnClickListener listener = new OnClickListener() {
		//1.intent在这里初始化是错误的!!
		Intent intent = new Intent(MainActivity.this,BindServiceDemo.class);    //*1
		public void onClick(View v) {
			//2.intent在这里初始化是是正确的!!
			Intent intent = new Intent(MainActivity.this,BindServiceDemo.class);
			switch (v.getId()) {
			case R.id.btnBindService:
				bindService(intent, conn, Context.BIND_AUTO_CREATE);
				break;
			case R.id.btnUnbindService:
				unbindService(conn);
				break;
			default:
				break;
			}
		}
	};
错误信息除了标题的提示外,还有“java.lang.NullPointerException”的错误,代码检查了数遍还是不得其解,最终在CSDN获得了些启示。

二、原因分析

      因为这里的listener是MainActivity这个类的一个普通成员,普通成员会在类实例化时初始化。当启动MainActivity时,必然会有类似new MainActivity()之类的行为,此时就要对listener这个成员变量初始化了。于是,实例化listener时,要执行new OnClickListener(),那么就会执行到“*1”这一行(初始化自身的成员变量)。此时要用到“MainActivity.this”!!

     问题就在这里!!由于MainActivity类的实例化对象尚在生成阶段,因此此时的MainActivity.this还是个空指针!错误由是而生。

三、后记

     我们常常看到的“类名.this”,都是出现在方法中的。因为方法是所在类生成实例化对象之后才通过“类名.方法名”引用的,因此不会出错。

     不知大家认为如何?

     希望大家可以不犯这个错误了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值