Android 无法启动活动组件信息:java.lang.NullPointerException

Android 无法启动活动组件信息:java.lang.NullPointerException,android,checkboxlist,Android,Checkboxlist,异常: 无法启动活动组件信息{com.scytec.datamobile.vd.gui.android/com.scytec.datamobile.vd.gui.android.SelectedList}:java.lang.NullPointerException.. 我只想显示复选框列表视图,在每个复选框上显示“checked”,但我不知道为什么这会给我一个例外 public class SelectedList extends Activity implements IObserver{

异常

无法启动活动组件信息{com.scytec.datamobile.vd.gui.android/com.scytec.datamobile.vd.gui.android.SelectedList}:java.lang.NullPointerException..
我只想显示复选框列表视图,在每个复选框上显示“checked”,但我不知道为什么这会给我一个例外

public class SelectedList extends Activity implements IObserver{

        private ListView machine_listview;
        ArrayAdapter<String> adapter;
        ArrayList<String> arrayListofMachines;
        ArrayList<String> arrayListofMachineNumbers;
        Vector<MDCMachineStatus> machineStatus_vector;
        Handler handler;

        private static int oldPosition = 0;
        private Boolean firstClick = true;




        @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.machinelistview);

            machine_listview = (ListView) findViewById(R.id.machine_listview);
            machine_listview.setFastScrollEnabled(true);

            MachineStatusSingleton.Register(this);

            getData();

            adapter = new ArrayAdapter<String>(SelectedList.this, R.layout.selectedlist,R.id.text1, arrayListofMachines);

            machine_listview.setAdapter(adapter);

            machine_listview.setSelection(oldPosition);


            CheckBox chk=(CheckBox)findViewById(R.id.check);
            chk.setOnCheckedChangeListener(new OnCheckedChangeListener()
            {

       public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
        TextView txt=(TextView)findViewById(R.id.xtra);
        if (arg1)
            Log.d("", "abul, checked") ;
        else
             Log.d("", "abul, not checked") ;

       }

            }
            );


            machine_listview.setOnItemClickListener(new OnItemClickListener() {

                public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                        long arg3) {
                    // TODO Auto-generated method stub
                    oldPosition = position;
                    MachineStatusSingleton.setMachineNumber(arrayListofMachineNumbers.get(position));
                    SelectedList.this.finish();


                }

            });


            handler = new Handler(){
                public void handleMessage(android.os.Message msg) {


                    machine_listview.setAdapter(adapter);
                    adapter.notifyDataSetChanged();

                };
            };






        }

        public void Update(ISubject arg0) {
            // TODO Auto-generated method stub
        }

        @Override
        public void onDestroy()
        {
            super.onDestroy();

            MachineStatusSingleton.Unregister(this);
        }

        private void getData(){
            machineStatus_vector = MachineStatusSingleton.GetData();
            arrayListofMachines = new ArrayList<String>();
            arrayListofMachineNumbers = new ArrayList<String>();
            for(MDCMachineStatus temp: machineStatus_vector){
                arrayListofMachines.add(temp.toString());
                arrayListofMachineNumbers.add(temp.getNumber());
            }

            Collections.sort(arrayListofMachines);
            Collections.sort(arrayListofMachineNumbers);

        }


        private void updateData(){
            getData();

            handler.sendEmptyMessage(0);
            adapter.notifyDataSetChanged();
            int index = machine_listview.getFirstVisiblePosition();
            View v = machine_listview.getChildAt(0);
            int top = (v == null) ? 0 : v.getTop();

            // ...

            // restore
            machine_listview.setSelectionFromTop(index, top);
        }


    }
公共类SelectedList扩展活动实现IObserver{
私有ListView机器\u ListView;
阵列适配器;
ArrayList arrayListofMachines;
ArrayList ArrayListOfMachineEnumbers;
向量机;向量机;
处理者;
私有静态int oldPosition=0;
private Boolean firstClick=true;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
//TODO自动生成的方法存根
super.onCreate(savedInstanceState);
setContentView(R.layout.machinelistview);
machine\u listview=(listview)findviewbyd(R.id.machine\u listview);
machine_listview.setFastScrollEnabled(true);
MachineStatusSingleton.寄存器(此);
getData();
adapter=new ArrayAdapter(SelectedList.this,R.layout.SelectedList,R.id.text1,ArrayListFormaches);
machine_listview.setAdapter(适配器);
机器列表视图。设置选择(旧位置);
复选框chk=(复选框)findViewById(R.id.check);
setOnCheckedChangeListener(新的OnCheckedChangeListener()
{
已更改复选框时的公共无效(复合按钮arg0,布尔值arg1){
TextView txt=(TextView)findViewById(R.id.xtra);
如果(arg1)
Log.d(“,”abul,checked”);
其他的
Log.d(“,”abul,未检查“);
}
}
);
machine_listview.setOnItemClickListener(新的OnItemClickListener(){
公共单击(适配器视图arg0,视图arg1,内部位置,
长arg3){
//TODO自动生成的方法存根
oldPosition=位置;
MachineStatusSingleton.setMachineNumber(arrayListofMachineNumbers.get(position));
SelectedList.this.finish();
}
});
handler=newhandler(){
public void handleMessage(android.os.Message msg){
machine_listview.setAdapter(适配器);
adapter.notifyDataSetChanged();
};
};
}
公共无效更新(ISubject arg0){
//TODO自动生成的方法存根
}
@凌驾
公共空间
{
super.ondestory();
MachineStatusSingleton。取消注册(此);
}
私有void getData(){
machineStatus_vector=MachineStatusSingleton.GetData();
arrayListofMachines=新的ArrayList();
arrayListofMachineNumbers=新的ArrayList();
用于(MDC机器状态温度:机器状态向量){
arrayListofMachines.add(temp.toString());
add(temp.getNumber());
}
集合。排序(arrayListofMachines);
Collections.sort(ArrayListofMachineEnumbers);
}
私有void updateData(){
getData();
handler.sendEmptyMessage(0);
adapter.notifyDataSetChanged();
int index=machine_listview.getFirstVisiblePosition();
View v=machine_listview.getChildAt(0);
int top=(v==null)?0:v.getTop();
// ...
//恢复
机器列表视图。设置从顶部选择(索引,顶部);
}
}
紧接着:
TextView txt=(TextView)findViewById(R.id.xtra)

。。。添加以下内容:
如果(txt==null){Log.w(“,”TextView为null”);}


假设您的空指针异常在您选中复选框之前不会发生,这似乎是最可能的问题。当我忘记从XML布局中删除了相应的元素,或者我的ID错误时,我也遇到了同样的问题。通常,我会将“findViewById”返回的元素上的任何操作都封装在一个空检查中,以确保即使检索失败,应用程序至少不会崩溃。

看起来您正在分配给
chk
,然后在声明时调用
findViewById
,从而分配给
txt
。我必须先声明它们,然后使用
findViewById

分配给它们。我们的应用运行得很好,突然遇到NullPointerException无法启动活动等错误

基本上,NullPointerException无法启动活动发生在我们活动的onCreate()方法出现问题时

当:

  • 我们更改与此活动相关的布局的任何xml值

  • 如果我们没有在活动中正确映射xml UI

  • 尝试访问另一个布局文件中的UI

  • 解决方案:

  • 首先交叉检查所有映射的元素

  • 给出唯一的命名


  • 您可以发布完整的堆栈跟踪吗?在
    LogCat
    中,查看最后几条红线,它将为您提供导致崩溃的精确java文件的精确行号。它读起来像是
    Dalvik。。。NullPointerException由…引起。
    抱歉,各位。。我在这方面有一个问题:CheckBox chk=(CheckBox)findviewbyd(R.id.check);setOnCheckedChangeListener(新的OnCheckedChangeListener(){public void onCheckedChanged(复合按钮arg0,布尔值arg1){TextView txt=(TextView)findViewById(R.id.xtra);if(arg1)Log.d(“,”ab