Unable to instantiate activity ComponentInfo

Unable to instantiate activity ComponentInfo

        最近正在学习Android开发编程,于是今天就按照书本的例子写了一个小程序。该程序功能主要是利用Intent(意图)来连接两个不同的Activity,然后互相传递数据。主要代码如下:

package com.example.activityitentresult;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.widget.Button;
import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.TextView;

public class ItentResultMain extends Activity {

	static final int REQUEST_CODE = 0;
	TextView showInfo = (TextView)findViewById(R.id.show);
	Button btnBack = (Button)findViewById(R.id.btn);
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.result_intent);
		
		btnBack.setOnClickListener(new OnClickListener()
		{
			@Override
			public void onClick(View v) {
				// TODO 自动生成的方法存根
				Intent ien = new Intent(getBaseContext(), ResultIntent.class);
				startActivityForResult(ien, REQUEST_CODE);
			}
		});
	}
……
}

       运行程序时,编译器提示了错误,于是便打开LogCat来查询。错误日志如下:

Error message:

01-21 14:19:20.016: D/AndroidRuntime(281): Shuttingdown VM

01-21 14:19:20.016: W/dalvikvm(281): threadid=1:thread exiting with uncaught exception (group=0x4001d800)

01-21 14:19:20.046: E/AndroidRuntime(281): FATALEXCEPTION: main

01-21 14:19:20.046: E/AndroidRuntime(281):java.lang.RuntimeException: Unable to instantiate activityComponentInfo{com.example.activityintenttest/com.example.activityintenttest.ActivityIntentMain}:java.lang.NullPointerException

…….

       从日志中,我找到了这条错误:Unable to instantiateactivity ComponentInfo(不能实例化Activity中的组件信息)。奇怪了,我是通过了findViewById(int id)函数来进行View对象的实例化,怎么会出现对象实例化的错误呢?在找到问题的原因之前,还是有必要来了解一下相关的知识(通过帮助文档和网上资源东拼西凑):

       一个Android程序由一个或多个Activity组成,每个Activity包含一个或者几个界面,而界面则显示在Activity中。Activity本身并不现实,它是一个容器,装载着如文本框、按钮、多选项和编辑框等等。这些组件我们都将之统称为View,即“视图”。Activity作为视图的容器而存在。

      我们都知道,一个完整的Activity生命周期是由系统调用onCreate函数开始的,并且调用onDestroy函数结束。一个完整的Activity生命周期如下图所示:

        在程序中,为了创建一个activity,我们必须要创建一个Acitivity的子类(或者现存它的子类)。在你的子类中,当activity在它的生命周期中的多种状态之间转换时,你需要实现系统调用的回调函数,例如当系统将要被创建,停止,重起或者销毁。两种最重要的回调函数分别为onCreate()和onPause(),现重点介绍onCreate()函数。

onCreate()

        你必须实现这个方法。当你创建Activity时,系统会调用这个函数。在这个实现方法内,你必须要初始化你Activity中基本的的组件。更重要的是,对于这个Activity的用户界面,你必须要在这个方法内调用setContenView()来定义layout,然后再调用findViewById()函数来进行用户界面组件对象的实例化(摘自Android Developer帮助文档)。

        现在我们再回过头来看看错误代码,发现在onCreate函数声明之前就已经使用了findViewById()函数了。我们都知道该函数利用我们在XML文件中定义的View的id属性来获取相应的View对象,但是我却在onCreate函数之前调用了该方法。那等于是说,Activity还没创建,即存放用户界面组件的容器还没创建,生命周期还没开始,我们当然是不能使用这个函数来进行用户界面组件对象的实例化。于是我重新把该段代码放到onCreate函数之后,重新运行,结果编译成功。如下所示:
public class ItentResultMain extends Activity {

	static final int REQUEST_CODE = 0;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.result_intent);
		
TextView showInfo = (TextView)findViewById(R.id.show);
		Button btnBack = (Button)findViewById(R.id.btn);
		……
	}
……
}

         这是我的第一个Android小程序,虽然开发过程中遇到了许多错误,但是却让我通过阅读相关资料来更深入地了解Activity(活动)的概念。进步虽小,我却相信,一点一滴地积累,终能汇成江河,流向大海的!
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 这个错误是因为Android系统无法实例化指定的Activity组件。可能是因为Activity类名或包名错误,或者Activity类没有正确的构造函数。需要检查代码中的Activity组件信息是否正确,并确保Activity类存在并正确实现。 ### 回答2: 这个错误是由于Android应用程序在尝试启动活动时无法实例化所导致的。出现这个错误的原因可能很多,下面列举几种常见的情况: 1. 活动未在清单文件中注册:如果活动未在清单文件中注册,Android系统将无法找到该活动,并且无法实例化它。因此,您需要确保在清单文件中正确注册所有活动。 2. 活动的类名错误:如果在清单文件中注册活动时使用了错误的类名,将无法实例化该活动。这可能是由于一个简单的拼写错误或剪贴板中的粘贴错误造成的。要解决这个问题,您需要确保类名在清单文件中正确。 3. 活动的构造函数错误:通常,活动构造函数是空的,但有时您可能会在其中添加其他代码。如果发生了错误,可能无法实例化该活动。您需要检查活动构造函数并解决错误。 4. 活动的包名错误:通常,一个应用程序有多个包或子包。如果在清单文件中注册活动时,包名不正确,无法找到该活动类,并且将出现无法实例化活动的错误。您需要确保正确引用活动所在的包和类。 5. 应用程序的错误集成库:若在应用程序中使用了错误的第三方库或错误版本的库,也会导致无法实例化活动的错误。您需要确保在应用程序中正确配置和使用库。 总之,如果出现java.lang.runtimeexception: unable to instantiate activity componentinfo错误,应该检查清单文件中是否正确注册了活动、类名、包名和构造函数的正确性,排查第三方库等问题,找到原因后进行修正。 ### 回答3: Java.lang.RuntimeException:无法实例化Activity ComponentInfoAndroid应用程序应用过程中会出现的一个常见错误。这个错误通常发生在你在启动应用程序时,因为Android无法找到定义的Activity类。 首先,我们需要了解Android应用程序的结构。在Android应用程序中,每个Activity都有一个独特的活动标识符。这个标识符被用来定义Activity类,并确保在Android应用程序中的每个Activity类都具有唯一的标识符。如果Android应用程序无法找到正确的活动标识符,它就会导致Java.lang.RuntimeException:无法实例化Activity ComponentInfo错误。 有以下几种可能导致这个错误: 1、AndroidManifest.xml中定义的Activity类有误。 AndroidManifest.xml是一个非常重要的文件,在Android应用程序中,用于配置所有的组件。如果在Application节点中的Activity节点中没有正确定义Activity类,就会导致这个错误。 2、Activity类名称有误。 如果Activity类名称不正确或与AndroidManifest.xml中定义的类名称不匹配,Android应用程序也无法找到正确的Activity类。 3、Activity所需的组件缺少。 这可能是你使用的一些组件缺失了某些类或库导致的错误,可能是引用库文件或其它一些错误导致的。 解决这个错误的方法通常是检查你的AndroidManifest.xml文件和Activity类方法的代码,确保他们的定义和使用都是正确的。如果还是不行,可能需要检查所使用的库文件或引用的机制是否存在问题。在Android开发中,我们总是有机会遇到各种各样不同的问题,因此谨慎检查是解决问题的最好办法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值