共享偏好在android空指针异常



我有意从活动A移动到活动B。在活动A oncreate()中,我正在获取共享偏好的值,以便与某些条件进行比较,但它给了我空指针异常,如预期的那样(因为我不去活动B)。然而,我想写一个条件来获取共享偏好的数据,如果值不为空。谁能告诉我怎么才能做到这一点?下面是我的代码:

   In Activity B: 
               SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(MerchantLogin.this);
                SharedPreferences.Editor editor = prefs.edit();
                editor.putString("showdialog_login", "dontshow");
                editor.commit();
In Activity A:
            @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
      SharedPreferences prefs =null;
 prefs = PreferenceManager.getDefaultSharedPreferences(LoginScreen.this);
SharedPreferences.Editor editor = prefs.edit();

if ((prefs.getString("showdialog_login", null).equalsIgnoreCase("dontshow")))
{
}
else if((prefs.getString("showdialog_login", null).equalsIgnoreCase("true")))
{
}
else if((prefs.getString("showdialog_login", null).equalsIgnoreCase("dummy")))
{
}
else
{
    editor.putString("showdialog_login", "false");
    editor.commit();
}
    }

然而,我得到错误在这一行:

if ((prefs.getString("showdialog_login", null).equalsIgnoreCase("dontshow"))).How can i execute this block of code.

而不是:

prefs.getString("showdialog_login", null)

使用:

prefs.getString("showdialog_login", "")

因为,如果"showdialog_login"的值没有设置,它将返回空值,你可能会得到NPE(空指针异常)。

在使用equals进行比较时,应该始终使用该常量作为第一个参数,即

"dontshow".equalsIgnoreCase(prefs.getString("showdialog_login", null))

您将获得NullPointerException,因为showdialog_login属性尚未设置,即

prefs.getString("showdialog_login", null)

返回null,因为这是您设置的默认值。

实际上,你的条件是

null.equalsIgnoreCase("dontshow")

——自然以NullPointerException结尾。

In Activity A:

 static SharedPreferences prefs;
 @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
      prefs = getSharedPreferences("showdialog_login",0);
      String ss= prefs.getString("showdialog_login", "default");
if ((ss.equalsIgnoreCase("dontshow")))
{
}
else if((ss.equalsIgnoreCase("true")))
{
}
else if((ss.equalsIgnoreCase("dummy")))
{
}
else
{
    editor.putString("showdialog_login", "false");
    editor.commit();
}
    }

最新更新