我遇到了导致空指针异常的问题。
问题是由于我的 OnCheckedChanged() 方法的结构方式造成的。目前,不同的对话框 View 是根据创建时传递的字符串来扩展的。基于此 View ,向用户呈现不同的开关。
我正在寻找一种方法来重新配置以下代码,以便它能够运行所有“if 语句”并崩溃。我希望它做一些类似于 switch(v.getId()) + switch 结构的事情。
我试图避免为我的应用程序实现单独的 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");
}
}
最佳答案
您还可以有一个简单的方法来避免重复
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");
关于java - 多个开关的问题,NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676007/