2014-10-31 3 views
0

Я столкнулся с проблемой, вызывающей исключение нулевого указателя.Проблема с несколькими коммутаторами, NullPointerException

Проблема связана с тем, как мой метод OnCheckedChanged() структурирован. В настоящее время другое диалоговое представление раздувается на основе строки, которая передается при создании. Основываясь на этом представлении, существуют различные переключатели, которые предоставляются пользователю.

Я ищу способ переконфигурировать следующий код, чтобы он выполнял все инструкции if if и сбой. Я бы хотел, чтобы он сделал что-то похожее на структуру коммутатора (v.getId()) +.

Я стараюсь избегать использования отдельных OnCheckedChange для моего приложения.

Кто-нибудь знает, как я мог бы реструктурировать это, чтобы избежать исключения NullPointerException?

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    // TODO Auto-generated method stub 
    if (alertDelete.isChecked()) { 
     // The toggle is enabled 
     permSet.add("alert_delete"); 
     Log.e("ALERTDELETE", "CHECKED"); 
    } else { 
     // The toggle is disabled 
     permSet.remove("alert_delete"); 
     Log.e("ALERTDELETE", "UNCHECKED"); 
    } 
    if (autoCreate.isChecked()) { 
     // The toggle is enabled 
     permSet.add("auto_create"); 
     Log.e("ALERTDELETE", "CHECKED"); 
    } else { 
     // The toggle is disabled 
     permSet.remove("auto_create"); 
     Log.e("ALERTDELETE", "UNCHECKED"); 
    } 
    if (autoDelete.isChecked()) { 
     // The toggle is enabled 
     permSet.add("auto_delete"); 
     Log.e("ALERTDELETE", "CHECKED"); 
    } else { 
     // The toggle is disabled 
     permSet.remove("auto_delete"); 
     Log.e("ALERTDELETE", "UNCHECKED"); 
    } 
    if (autoEdit.isChecked()) { 
     // The toggle is enabled 
     permSet.add("auto_edit"); 
     Log.e("ALERTDELETE", "CHECKED"); 
    } else { 
     // The toggle is disabled 
     permSet.remove("auto_edit"); 
     Log.e("ALERTDELETE", "UNCHECKED"); 
    } 

} 

ответ

1

вы также можете иметь простой способ, чтобы избежать повторности

private void checkAndSet(Checkable checkable, String param) { 

if (checkable.isChecked()) { 
      // The toggle is enabled 
      permSet.add(param); 
      Log.e("ALERTDELETE", "CHECKED"); 
     } else { 
      // The toggle is disabled 
      permSet.remove(param); 
      Log.e("ALERTDELETE", "UNCHECKED"); 
     } 

} 

и в каждом случае вы можете позвонить:

checkAndSet(autoDelete, "auto_delete"); 
+0

что checkAndSet будет вызываться из onCheckChanged() правильно ? –

0

Реализованный переключатель() и ответ выше.

@Override 
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    // TODO Auto-generated method stub 

    switch (buttonView.getId()) { 
    case R.id.switchAlertDelete: 
     if (alertDelete.isChecked()) { 
      // The toggle is enabled 
      permSet.add("alert_delete"); 
      Log.e("ALERTDELETE", "CHECKED"); 
     } else { 
      // The toggle is disabled 
      permSet.remove("alert_delete"); 
      Log.e("ALERTDELETE", "UNCHECKED"); 
     } 
     break; 

    case R.id.switchAutomationCreate: 

     if (autoCreate.isChecked()) { 
      // The toggle is enabled 
      permSet.add("auto_create"); 
      Log.e("ALERTDELETE", "CHECKED"); 
     } else { 
      // The toggle is disabled 
      permSet.remove("auto_create"); 
      Log.e("ALERTDELETE", "UNCHECKED"); 
     } 

     break; 

    case R.id.switchAutomationDelete: 

     if (autoDelete.isChecked()) { 
      // The toggle is enabled 
      permSet.add("auto_delete"); 
      Log.e("ALERTDELETE", "CHECKED"); 
     } else { 
      // The toggle is disabled 
      permSet.remove("auto_delete"); 
      Log.e("ALERTDELETE", "UNCHECKED"); 
     } 

     break; 

    case R.id.switchAutomationEdit: 

     if (autoEdit.isChecked()) { 
      // The toggle is enabled 
      permSet.add("auto_edit"); 
      Log.e("ALERTDELETE", "CHECKED"); 
     } else { 
      // The toggle is disabled 
      permSet.remove("auto_edit"); 
      Log.e("ALERTDELETE", "UNCHECKED"); 
     } 

     break; 

    } 
Смежные вопросы