如何修复‘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
相关产品推荐
相关产品推荐

