无法启动活动ComponentInfo:java.lang.NullPointerException

Ahm*_*lan 2 android checkboxlist

Exception:

Unable to start activity ComponentInfo{com.scytec.datamobile.vd.gui.android/com.scytec.datamobile.vd.gui.android.SelectedList}: java.lang.NullPointerException.. 我只想显示复选框列表视图,并在每次检查时显示"已检查",但我不知道为什么这会给我一个例外.

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);
        }


    }
Run Code Online (Sandbox Code Playgroud)

Sra*_*ani 11

我们运行我们的应用程序非常好,突然我们遇到NullPointerException无法启动活动等错误.

当我们的Activity的onCreate()方法出现问题时,基本上会出现NullPointerException无法启动活动.

这发生在:

  1. 我们更改与此Activity相关的任何布局的xml值

  2. 如果我们没有在我们的Acivity中正确映射xml UI

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

方案:

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

  2. 给出独特的命名


Dre*_*awn 9

直接在:
TextView txt =(TextView)findViewById(R.id.xtra);

...添加:
if(txt == null){Log.w("","TextView为null"); }

假设在您选中复选框之前未发生空指针异常,这听起来像是最可能的问题.当我忘记从XML布局中删除了相应的元素,或者我的ID出错时,我遇到了同样的问题.通常我会在null检查中对"findViewById"返回的元素进行任何操作,以确保即使检索失败,应用程序也至少不会崩溃.

  • 不要这样做.您不需要使用null检查包装所有findViewByIds.如果已从布局中删除ID,则应更改代码以反映此情况. (2认同)