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);@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.result_intent);btnBack.setOnClickListener(new OnClickListener(){@Overridepublic 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;@Overrideprotected 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(活动)的概念。进步虽小,我却相信,一点一滴地积累,终能汇成江河,流向大海的!

更多相关文章

  1. SAP BSP, Java Web Project,Android和微信小程序的初始页面设置
  2. Android(安卓)SDK文档之Drawable Mutations
  3. 如何制作Jar包并在android中调用jar包
  4. Android开发学习笔记(十三) ProgressDialog学习
  5. 组件化实践记录——在library module的manifest中使用applicatio
  6. android事件分发机制的实现原理
  7. android message机制
  8. android NDK 开发
  9. 箭头函数的基础使用

随机推荐

  1. Android:实现Button点击事件的四种方式
  2. 系统相册分析(GallerPicker)
  3. Android(安卓)xml中配置数组资源,在java中
  4. Android(安卓)之AdapterView与Adapter
  5. Android(安卓)点击空白处,隐藏软键盘
  6. 深入理解Android:卷II
  7. Android的震动与振铃
  8. Android控件——Checkbox复选框、RadioBu
  9. 实现查询地址和路线导航的代码
  10. Android(安卓)Gradle开发