2012-02-09 6 views
2

Exception:Невозможно начать деятельность ComponentInfo: java.lang.NullPointerException

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


    } 
+2

Не могли бы вы опубликовать полную трассировку стека? – Sly

+0

В своем «LogCat» взгляните на последние пару ** красных линий **, которые дадут вам точный номер строки точного java-файла, который является причиной сбоя. Он читает что-то вроде «Dalvik ... NullPointerException, вызванное ...» – tipycalFlow

+1

извините, ребята .. У меня проблема в этом: CheckBox chk = (CheckBox) findViewById (R.id.check); chk.setOnCheckedChangeListener (новый OnCheckedChangeListener() { общественного недействительными onCheckedChanged (CompoundButton arg0, логическое значение arg1) { TextView TXT = (TextView) findViewById (R.id.xtra); , если (арг1) Log.d ("", "Абул, проверил"); еще Log.d ("", "Абул, не проверено"); } } ); –

ответ

11

Мы запускаем наше приложение очень хорошо, и вдруг мы сталкиваемся с NullPointerException или Не удается запустить активности и т.д. ошибки.

В основном NullPointerException или Невозможно начать деятельность происходит, когда есть проблема в OnCreate() метод нашей деятельности.

Это происходит, когда:

  1. Мы изменяем любые значения XML верстки связанные с этой деятельностью

  2. Если мы не карту интерфейса XML должным образом в нашем Acivity

  3. Try для доступа к пользовательскому интерфейсу, который находится в другом файле макета.

Решение:

  1. Первый перепроверить все отображенные элементы

  2. Дайте уникальный именования

9

Непосредственно после того, как:
TextView TXT = (TextView) findViewById (R.id.xtra);

... добавить это:
if (txt == null) {Log.w ("", "TextView is null"); }

Предполагая, что исключение нулевого указателя не возникает, пока вы не установите этот флажок, это похоже на наиболее вероятную проблему. Я столкнулся с тем же, когда забыл, что я удалил соответствующий элемент из макета XML, или если у меня неверный идентификатор. Обычно я переношу любые действия на элемент, возвращаемый «findViewById» в пределах нулевой проверки, чтобы гарантировать, что даже если извлечение завершится неудачно, приложение, по крайней мере, не потерпит крах.

+2

Никогда не делайте этого. Вам не нужно обертывать все ваши findViewByIds нулевой проверкой. были удалены из макета, ваш код должен быть изменен, чтобы отразить это. –

+1

Согласовано, обновление кода, отражающего изменение, является наилучшим подходом, но, безусловно, стоит рассмотреть потенциальное воздействие, если такая ошибка пропущена - без null, приложение может оказаться непригодным для использования, сбой каждый раз, когда пользователь пытается загрузить определенную страницу, по сравнению с нулевыми проверками, приложение, скорее всего, будет работать с визуальными ошибками. Решение о том, следует ли использовать шаблон с нулевой проверкой или не может быть затронуто тем, разрабатывает ли соло проекты на стороне, а не имеет полную поддержку QA, чтобы обеспечить полное приложение stabili ти. – DreadPirateShawn

1

Похоже, вы назначаете chk, а затем txt, позвонив по номеру findViewById, когда вы их объявите. Сначала мне пришлось объявить их, а затем назначить им, используя findViewById.