import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;public class ButtonActivity extends Activity implements OnClickListener {
Context context;
View view;
public ButtonActivity(Context context,View view){
this.context = context;
this.view = view;
}
public void initButton() {
Button barChart = (Button) view.findViewById(R.id.button1);
Button pieChart = (Button) view.findViewById(R.id.button2);
Button threadChart = (Button) view.findViewById(R.id.button3);
barChart.setOnClickListener(this);
pieChart.setOnClickListener(this);
threadChart.setOnClickListener(this); } @Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
Intent barintent = new Intent(context,BarChartActivity.class);
barintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
            Log.i("tag", (barintent == null)+"");
this.startActivity(barintent);
break;
case R.id.button2:
Intent pieChart = new Intent(context,PieChartActivity.class);
pieChart.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
this.startActivity(pieChart);
break;
case R.id.button3:
Intent threadChart = new Intent(context,ThreadChartActivity.class);
threadChart.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
this.startActivity(threadChart);
break; default:
break;
}

}}如上代码,这是我定义的activity,用来专门处理button的点击事件。我的想法是,在另一个activity调用initButton方法从而实现对button的控制,即new ButtonActivity(this, findViewById(R.id.barbut)).initButton();
但是,this.startActivity(barintent);即上面红色的那一行,遇上了空指针异常,但是我用日志测试barintent时发现他不是空啊,究竟这个异常是如何引起的呢?
求指导!

解决方案 »

  1.   

    new ButtonActivity(this, findViewById(R.id.barbut)).initButton();??
    一个activity的启动,背后做的东西绝不是我们单纯new一个出来这么简单
      

  2.   

    BarChartActivity窗体加入AndroidManifest.xml了吗?
      

  3.   

    加了,没加的的话会报classNotFoundException的
      

  4.   

     activity也是类啊,实例化对象不是new么? 只不过我这个不是用来显示界面而已啊,难道一定要我用service来做么?不是这么简单,请问如何呢?虚心求教
      

  5.   

    能在界面显示的activity都应该有相应的布局文件,你的这个activity没有//setContentView(R.layout.main);这样类似的代码,说明你的activity没有和相应的视图文件绑定。activity初始化时将进行相应的事件和视图的绑定,所以相应的事件和视图都要在同一个activity中进行声明!你没有添加视图文件,虽然可以获取相应的空间的ID,但是却无发获得相应事件!所以显示空指针异常!//个人意见,如有错误,请指正
      

  6.   

    实际上楼主这个类根本没有必要去继承Activity...
    按楼主的思想,只需要做一个实现OnClickListener的类来处理onClick事件.
    大家都被楼主的非主流代码给弄晕了.
    我认为, 问题的原因在于this.startActivity(barintent);这一句.
    不要用this, 用你传入的context吧.Activity不是这样用的.
      

  7.   

    acticity作为组件之一,是由android这个应用框架调用的,你也应该了解它的生命周期吧,你直接调用new,就没有onCreate onStart 等方法的调用。用来专门处理button的点击事件的activity是不存在的。。每个activity都有属于自己的控件。
      

  8.   

    嗯嗯,楼上正解。楼主不必继承activity。可以在每个activity的oncreate找到相应的控件,然后传进一个listener里面实现监听。
      

  9.   

    这个错误很明显,你找的这个Button还没有被画出来。findviewById这个方法一定是控件被绘制后才有效的。你可以不用继承Activity,只需要传进Button的父控件View,然后用View.findViewById找。前提是Button已经被绘制出,并且被赋Id值