如何在android中检查共享首选项是否为null?

时间:2012-12-27 12:42:53

标签: android sharedpreferences

在我的登录和注销功能应用程序中,我在活动开始时检查共享首选项是否为空,但我仍然收到NullPointerException。

这是我的HomeActivity.java代码:

// Username And Password Editbox
String eusername;
String epassword;

// Shared Preferences String declaration
String spusername;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     

    SharedPreferences spreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
    spusername=spreferences.getString("spusername","");

    if(!spusername.equals(""))
    {   
        Log.e("Spusername not null","-->"+spusername);
    }
    if(spusername==null)
    {
        Log.e("Spusername null","-->"+spusername);
    }
}

6 个答案:

答案 0 :(得分:9)

您在SharedPreferences上有contains方法。

boolean isSpUsernameDefined = spreferences.contains("spusername");

答案 1 :(得分:2)

方法“spreferences.getString(”spusername“,eusername);”返回默认值为eusername,为null。因此它给出了空指针异常。

而不是eusername,您可以尝试给出一些字符串值,如下所示。

spreferences.getString(“spusername”,“”);

答案 2 :(得分:1)

您在不初始化此变量的情况下给予eusername,因此获取空指针异常 所以试试这个

spusername = preferences.getString("spusername", "n/a");

if(spusername!= null && !spusername.equals(""))
    {   
        Log.e("Spusername != null","-->"+spusername);

    }
   else{
               // your code is here
    }

答案 3 :(得分:1)

尝试:

spusername=spreferences.getString("spusername", "");

如果在SharedPreferences中找不到密钥,则为spusername添加默认值,现在将其检查为emplty或null:

spusername=spreferences.getString("spusername", "");

if(!spusername.equals("")){   
     Log.e("Spusername != null","-->"+spusername);
}else{
      // do some code here
}

答案 4 :(得分:1)

只是因为你没有初始化默认值。

String eusername;

在您没有将任何值保存到共享首选项中之前,这将始终为null。 只需用空字符串

初始化
String eusername = "";

答案 5 :(得分:1)

首先,请确保您已将某些数据保存到Sharedpreferences中,如下所示:

SharedPreferences.Editor preferences = getSharedPreferences(SETTINGS, MODE_PRIVATE).edit();
preferences.putString("appVersion", "1.0");
preferences.putString("appAuthor", "John Doe");
preferences.putString("authorEmail", "test@gmail.com");
preferences.apply();
preferences.commit();

然后,您需要像这样初始化SharedPreferences:

SharedPreferences preferences = getSharedPreferences(SETTINGS, MODE_PRIVATE);

然后,您可以使用getAll()方法获取可用的Sharedpreferences数组,然后使用contains方法根据您的情况进行一些逻辑处理。 这是我记录所有可用首选项的操作:

Log.d("AVAILABLE_PREFS", String.valueOf(preferences.getAll()));

然后我可以根据得到的结果来做条件:

if (preferences.contains("appVersion")) {

    if(preferences.getString("appVersion", SETTINGS).equals("1.0")){
         // Do something if TRUE
    }

} else {
   // Do something here if no Preferences found.
}