【问题标题】:Android (Java) Enum null pointer errorAndroid(Java)枚举空指针错误
【发布时间】:2013-09-03 15:05:44
【问题描述】:

我不顾一切地尝试在开关盒中使用枚举。但很明显,我做错了什么。

这是我定义枚举的代码:

public class WorkoutStopwatch extends Activity implements OnClickListener {

    private boolean timer_running = false;
    public enum CounterState {
        WORKOUT, REST
    }
    CounterState state;

以及我使用它的被覆盖的 onClick 方法:

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

当我运行我的程序时,启动和停止按钮的 onClick 调用工作得很好,但是重置按钮会导致应用程序崩溃,并出现“FATAL EXCEPTION: main”和“java.lang.NullPointerException”错误指向该行的开关。从我一直在阅读的内容来看,读取开关时枚举的值可能为 null,因此我将枚举声明更改为:

    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;

我同意,看起来是一个更完整的定义,但仍然存在问题。留下这样的代码并不能解决问题,读取时状态似乎仍然为空。像这样在对象的声明中添加一个 int:

CounterState state(0);

给我一​​个 Eclipse 错误“令牌“0”上的语法错误,删除此令牌”。所以我有点迷路了。据我所知,现在有一个枚举的构造函数,我应该能够传递一个 int 来初始化它在创建时的值,但这似乎不起作用。

【问题讨论】:

  • Java 不是 C++:初始化和声明是单独的步骤(或至少是单独的语法)。如果您不分配任何内容,则该变量将具有默认值(null,0 或 false;除非它是局部变量,否则如果您没有初始化它,您将无法访问它)。
  • 感谢帮助,不习惯在两个不同的语句中声明和初始化。

标签: java android enums


【解决方案1】:

您是否尝试过在使用 state 变量之前对其进行初始化?

CounterState state = CounterState.UNKNOWN;

【讨论】:

    【解决方案2】:

    空指针异常仅在您之前使用该变量或未对其进行初始化时出现。因此,首先检查您在此处使用的所有变量及其初始化步骤。自己做,以后就不会犯这种错误了。

    【讨论】:

      【解决方案3】:

      您的错误原因可能是:
      “v.getId()”为空。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 1970-01-01
        相关资源
        最近更新 更多