我有意从活动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();
}
}