2

我按意图从活动 A 移动到活动 B。我在活动 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.
4

3 回答 3

2

代替 :

prefs.getString("showdialog_login", null)

利用:

prefs.getString("showdialog_login", "")

因为,如果未设置“showdialog_login”首选项的值,它将返回空值,您可能会得到 NPE(空指针异常)。

于 2013-06-19T12:02:47.823 回答
0

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

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

你得到了,NullPointerException因为该showdialog_login属性尚未设置,即

prefs.getString("showdialog_login", null)

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

实际上,您的情况是这样的

null.equalsIgnoreCase("dontshow")

- 自然地以NullPointerException.

于 2013-06-19T11:58:26.013 回答
0

在活动 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();
}

    }
于 2013-06-19T12:03:48.263 回答