나는 사지에 나가서 스위치 케이스에서 열거 형을 사용하려고했습니다. 그러나 분명히, 나는 잘못된 것을하고 있습니다. 내 프로그램을 실행하면Android (Java) 열거 형 null 포인터 오류
@Override
public void onClick(View v) {
switch(v.getId()) {
case R.id.start_button:
timer_running = true;
// Make call to timer update class to start
break;
case R.id.stop_button:
timer_running = false;
// Make call to timer update class to stop
break;
case R.id.reset_button:
if (!timer_running) {
switch(state) {
case WORKOUT:
// TODO: Reset the counter to the workout time
break;
case REST:
// TODO: Reset the counter to the rest time
break;
}
}
break;
}
}
온 클릭이 시작 요구 : 나는 그것을 활용
public class WorkoutStopwatch extends Activity implements OnClickListener {
private boolean timer_running = false;
public enum CounterState {
WORKOUT, REST
}
CounterState state;
과 재정의의 onclick 방법 :
여기에 내가 열거를 정의하는 코드입니다 중지 버튼은 정상적으로 작동하지만 재설정 버튼을 사용하면 응용 프로그램이 스위치 행에서 '치명적 예외 : 주'및 'java.lang.NullPointerException'오류가 발생하여 충돌이 발생합니다. 동의합니다
private enum CounterState {
UNKNOWN(0),
WORKOUT(1),
REST(2);
private int stateValue;
CounterState(int state) {
this.stateValue = state;
}
public int getStateValue() {
return stateValue;
}
public void setStateValue(int state) {
this.stateValue = state;
}
}
CounterState state;
는, 더 완전한 모양 : 내가 읽어 봤는데 바로는이 스위치를 읽을 때 열거의 값이 null 것으로 보인다, 그래서이 내 열거 선언을 변경 정의,하지만 여전히 문제가 발생합니다. 이와 같은 코드를 남겨두면 문제가 해결되지 않았지만 읽은 상태는 여전히 null 인 것 같습니다. 과 같이 객체의 선언에 int를 추가 :
CounterState state(0);
나에게 "이 토큰을 삭제"0 "토큰에 구문 오류"의 이클립스 오류를 제공합니다. 그래서 나는 조금 잃어 버렸어. 내가 열거 할 수있는 것은 열거 형의 생성자가 있다는 것입니다.이 생성자는 생성시 값을 초기화하기 위해 int를 전달할 수 있어야하지만 작동하지 않는 것 같습니다.
Java가 C++이 아닙니다. 초기화 및 선언은 별도의 단계 (또는 적어도 별도의 구문)입니다. 아무것도 지정하지 않으면 변수는 기본값 ('null', 0 또는 false; 로컬 변수가 아니면 초기화하지 않은 경우 액세스 할 수 없습니다)을 갖습니다. –
도움을 주셔서 감사합니다. 두 가지 진술로 선언하고 초기화하는 데 익숙하지 않았습니다. – iYeager