用户首次打开我的应用时,可能无法创建SharedPreferences
。
所以我想检查SharedPreferences
是否有值,如果没有值(即尚未创建SharedPreferences
),则创建它并设置其值。
这是我的代码:
public static final String PROTECT_STATE = "PROTECT";
@SuppressWarnings("null")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// set/check preference
SharedPreferences protectState = null;
Editor protectEditor;
String isprotectStateSet=protectState.getString("protect_state", "off");
if(isprotectStateSet == "off"){
protectState = getSharedPreferences(PROTECT_STATE, Context.MODE_PRIVATE);
protectEditor=protectState.edit();
protectEditor.putString("protect_state", "on");
protectEditor.commit();
Toast.makeText(getApplicationContext(), "set", Toast.LENGTH_SHORT).show();
}
我在下一行获得了nul指针异常。
String isprotectStateSet=protectState.getString("protect_state", "off");
答案 0 :(得分:2)
在阅读之前,您需要先打开SharedPreferences
。
移动
protectState = getSharedPreferences(PROTECT_STATE, Context.MODE_PRIVATE);
在这一行之上
String isprotectStateSet=protectState.getString("protect_state", "off");
答案 1 :(得分:0)
替换
SharedPreferences protectState = null;
Editor protectEditor;
与
SharedPreferences protectState = PreferenceManager.getDefaultSharedPreferences(this);
Editor protectEditor = protectState.edit();
UPD:
isprotectStateSet == "off"
这是错的。阅读this
答案 2 :(得分:0)
因为您将 protectState 设置为null,所以当它为null时,您正尝试从 getString ,这是
SharedPreferences protectState = null;