SharedPreferences上的空指针异常

时间:2015-06-04 19:25:23

标签: android nullpointerexception sharedpreferences

用户首次打开我的应用时,可能无法创建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");

3 个答案:

答案 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;