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

如何修复‘error: cannot find symbol method getSharedPreferences(Switch,int)’错误

嘿,我刚好遇到过这个问题!咱们来拆解下错误原因,再给你搞定它:

错误根源

你看到的error: cannot find symbol method getSharedPreferences(Switch,int),核心问题是**getSharedPreferences()的参数类型不匹配**:
这个方法的第一个参数要求是字符串类型的SharedPreferences文件名,但你直接把Switch控件sw1传进去了,Java找不到对应参数的方法,自然就报错了。

解决步骤&修正代码

我给你整理了完整的修复方案,还补上了状态保存的监听逻辑(不然只读取不保存也没用):

import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.Switch;

public class YourFragment extends androidx.fragment.app.Fragment {
    private Switch sw1;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.your_fragment_layout, container, false);
        // 先绑定你的Switch控件,记得替换成布局里的实际ID
        sw1 = view.findViewById(R.id.your_switch_id);

        // 1. 正确获取SharedPreferences实例:用上下文调用,第一个参数是字符串文件名
        SharedPreferences settings = requireContext().getSharedPreferences("MyAppSettings", 0);
        // 2. 读取之前保存的开关状态,默认值设为false
        boolean savedSwitchState = settings.getBoolean("switchkey", false);
        // 3. 给Switch设置初始状态
        sw1.setChecked(savedSwitchState);

        // 4. 添加开关状态改变监听,实时保存新状态
        sw1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // 编辑SharedPreferences并保存
                SharedPreferences.Editor editor = settings.edit();
                editor.putBoolean("switchkey", isChecked);
                editor.apply(); // 用apply()异步保存,比commit()更适合UI线程
            }
        });

        return view;
    }
}
额外注意点
  • 如果你是在Activity里写代码,直接调用getSharedPreferences()就行,不需要requireContext();但如果是Fragment,一定要用上下文对象调用,避免空指针。
  • 文件名"MyAppSettings"可以自定义,只要是字符串就行。
  • 保存状态时用apply()而不是commit(),因为apply()是异步执行的,不会阻塞UI线程,体验更好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:55:42