在我的登录和注销功能应用程序中,我在活动开始时检查共享首选项是否为空,但我仍然收到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);
}
}
答案 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.
}