You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何SharedPreferences在OnClick事件中无法正常工作?

Android代码运行异常问题解决

下面这段代码单独放置时无法正常运行,但放入onCreate()方法内即可正常执行:

Button btn_validate = (Button) findViewById(R.id.btn_verify_validate);
    btn_validate.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        SharedPreferences sp = getSharedPreferences("CONFIG", MODE_PRIVATE);
        SharedPreferences.Editor spe = sp.edit();
        spe.putInt("GL_ID_CLASS", 34);
        spe.commit();`
    }
}

问题原因及修复方案

  1. 语法错误导致编译失败

    • 代码里spe.commit();后面多了一个多余的反引号(`),直接删掉即可
    • 代码末尾缺少一个闭合的),用来结束setOnClickListener()的参数传递,补上这个括号就能解决语法问题
  2. 控件初始化时机错误

    • findViewById()必须在Activity加载完布局(即调用setContentView()之后)才能获取到有效控件实例,否则会返回null,调用setOnClickListener()时触发空指针异常
    • 类的成员变量区域初始化控件的时机早于onCreate(),此时Activity还没完成视图加载,自然拿不到控件

修复后的完整代码(放在onCreate内)

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout); // 替换成你的布局文件名

    Button btn_validate = (Button) findViewById(R.id.btn_verify_validate);
    btn_validate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            SharedPreferences sp = getSharedPreferences("CONFIG", MODE_PRIVATE);
            SharedPreferences.Editor spe = sp.edit();
            spe.putInt("GL_ID_CLASS", 34);
            spe.commit();
        }
    });
}

注意事项

  • 所有控件初始化操作必须放在setContentView()之后执行
  • 如果需要在多个方法中复用控件,可以在Activity类里声明成员变量,再在onCreate()中完成初始化

内容的提问来源于stack exchange,提问作者Thiago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:02:01