检查SharedPrefs是否等于Null时检测到空指针异常

时间:2015-12-15 01:24:09

标签: android nullpointerexception sharedpreferences

我正在创建一个Android应用,通过displayEmailCaptureFragment()方法捕获用户的电子邮件。如果我已经捕获了用户的电子邮件,我不想提示用户再次输入他们的电子邮件。

我在MainActivity之后但在onCreate方法之前声明customerEmailAddress String:

@Override
public void onClick(View v) {

    int currentPosition = pager.getCurrentItem();
    switch (v.getId()) {
        case R.id.right_arrow:
            pager.setCurrentItem(currentPosition + 1);
            break;
        case R.id.left_arrow:
            pager.setCurrentItem(currentPosition - 1);
            break;
        case R.id.download_resume_button:
                customerEmailAddress = mPrefs.getString(EMAILKEY, null);
            if (customerEmailAddress.equals(null)){
                displayEmailCaptureFragment();
            }
            else {
                showPurchaseDialog();
        }
            break;
    }
}

然后我根据用户在应用程序中的响应操作获得了一个OnClick()方法。基本上,如果用户已经输入了他们的电子邮件地址,我会尝试在onClick之后允许某个活动。如果他们没有输入他们的电子邮件地址,那么我提示他们输入他们的电子邮件并将其保存到共享首选项。我使用了一个基本的if - else语句,但即使我分配了customerEmailAddress字符串,我仍然会生成空指针异常:

import scala.util.parsing.combinator.JavaTokenParsers

class SimpleParser(number: Int) extends JavaTokenParsers {
  def base: Parser[Int] = literal("()").map(_ => number)
  def pars: Parser[Int] = base | ("(" ~> pars <~ ")").map(_ + number)

  def plus: Parser[Int] = "+" ~> expr
  def expr: Parser[Int] = (pars ~ opt(plus).map(_.getOrElse(0))).map {
    case first ~ rest => first + rest
  }
}

object ParserWith3 extends SimpleParser(3)

感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

此代码错误 - 您无法在null对象上调用equals(...)或任何其他方法。

...
customerEmailAddress = mPrefs.getString(EMAILKEY, null);
if (customerEmailAddress.equals(null)){
...

请改为:

customerEmailAddress = mPrefs.getString(EMAILKEY, null);
if (customerEmailAddress == null){ 
...

或使用TextUtils:

customerEmailAddress = mPrefs.getString(EMAILKEY, null);
if (TextUtils.isEmpty(customerEmailAddress)){ 
...