首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >android验证邮件时出现空指针异常

android验证邮件时出现空指针异常
EN

Stack Overflow用户
提问于 2017-05-04 17:05:11
回答 4查看 710关注 0票数 0

在我的android应用程序中,当单击登录按钮时,我从编辑文本中获取输入,并将其传递给我的演示者。然后,演示者使用LoginValidator实用程序类对其进行验证,具体取决于结果,它要么继续正常登录流程,要么向活动发送一条消息,通知电子邮件或/和密码无效。

LoginValidator的测试类中,我执行以下操作:

代码语言:javascript
运行
复制
public class LoginValidatorTest {

    private static final String INVALID_EMAIL = "ewksd";
    private static final String VALID_EMAIL = "tom.finet@gmail.com";
    private static final String INVALID_PASSWORD = "sjadsaA";
    private static final String VALID_PASSWORD = "Asdfgh1d";

    @Test
    public void shouldValidateInvalidEmail() {
        Assert.assertEquals(LoginValidator.validateEmail(INVALID_EMAIL), false);
    }

    @Test
    public void shouldValidateValidEmail() {
        Assert.assertEquals(LoginValidator.validateEmail(VALID_EMAIL), true);
    }

    @Test
    public void shouldValidateInvalidPassword() {
        Assert.assertEquals(LoginValidator.validatePassword(INVALID_PASSWORD), false);
    }

    @Test
    public void shouldValidateValidPassword() {
        Assert.assertEquals(LoginValidator.validatePassword(VALID_PASSWORD), true);
    }
}

下面是测试调用的LoginValidator类:

代码语言:javascript
运行
复制
public class LoginValidator {

    /**
     * @param email the email to be validated
     * @return true if the email is valid
     */
    public static boolean validateEmail(String email) {
        return email != null && Patterns.EMAIL_ADDRESS.matcher(email).matches();
    }

    /**
     *
     * @param password the password to be validated
     * @return true if the password is valid
     */
    public static boolean validatePassword(String password) {
        if (password == null)
            return false;
        else if (password.length() < 6)
            return false;
        else if (!password.contains("^[0-9]"))
            return false;
        else if (!password.contains("[A-Z]+"))
            return false;
        return true;
    }
}

当测试运行时,结果如下:

我如何修复我的代码以使所有测试都通过?

更新:

下面是密码验证的正则表达式:

通过进一步分析,我得出结论,代码Patterns.EMAIL_ADDRESS为空,因此在对其调用.matcher(email)时会导致NullPointerException。为什么见鬼的Patterns.EMAIL_ADDRESS会返回null?

EN

回答 4

Stack Overflow用户

发布于 2017-05-04 17:14:23

不确定邮件检查,但您的密码检查有错误。假设您只想检查密码是否包含一个数字,则应将其更改为:

代码语言:javascript
运行
复制
 public static boolean validatePassword(String password) {
    if (password == null)
        return false;
    else if (password.length() < 6)
        return false;
    else if (!password.matches(".*[0-9]+.*"))
        return false;
    else if (!password.matches(".*[A-Z]+.*"))
        return false;
    return true;
}

大写也是错误的,因为contains不接受正则表达式。其中一个选项是使用matches

票数 0
EN

Stack Overflow用户

发布于 2017-05-04 17:16:24

尝试使用Mockito和mock LoginValidator,如下所示:

代码语言:javascript
运行
复制
// If you want to create an instance
LoginValidator loginValidator = mock(LoginValidator.class);

// If you need to access static methods from that class
mock(LoginValidator.class);
票数 0
EN

Stack Overflow用户

发布于 2017-05-04 18:34:11

代码语言:javascript
运行
复制
public static boolean validatePassword(String pwd) {
    return pwd != null && pwd.matches("((?=.*\\d)(?=.*[A-Z]).{6,})");
}

"((?=.*\\d)(?=.*[A-Z]).{6,})"是至少包含一个数字、至少一个大写字母和至少6个字符的正则表达式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43778438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档