在onClick方法

时间:2015-07-07 18:17:36

标签: java android nullpointerexception

我创建了一个验证电子邮件格式的类。

public class EmailValidator {
    private Pattern pattern;
    private Matcher matcher;

    // regular expression for email validation
    private static final String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$";

    public EmailValidator() {
    pattern = Pattern.compile(EMAIL_PATTERN);
    }

    public boolean validate(final String email) {
        matcher = pattern.matcher(email);
        return matcher.matches();
    }
}

通过使用上面的类,我想实现一个实际执行验证的代码,如果电子邮件不是有效格式,则发送吐司。所以我创建了另外一个代码如下。

RegisterActivity.java

(1)变量

EmailValidator validator;
EditText etEmail;

(2)onClick方法

String email = etEmail.getText().toString();
**if(validator.validate(email) == false)** {
    Toast.makeText(getApplicationContext(), "Wrong email format.", Toast.LENGTH_LONG).show();

到目前为止,代码似乎没有任何问题,但是当我运行它时,它会在上面的部分上抛出一个NullPointerException。我错过了什么吗?

如果您需要进一步了解代码,请告诉我们,以便我能尽快更新。谢谢!

更新:这是logcat。

07-07 20:05:30.761      342-342/com.marshall.gruppo E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.marshall.gruppo, PID: 342
java.lang.NullPointerException
        at com.marshall.gruppo.ui.RegisterActivity$1.onClick(RegisterActivity.java:101)
        at android.view.View.performClick(View.java:4633)
        at android.view.View$PerformClick.run(View.java:19270)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5602)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)

4 个答案:

答案 0 :(得分:3)

你必须像这样创建EmailValidator类的对象

@Configuration
@ImportResource("classpath:context.xml")
public class IntegrationTestConfig {

    @Bean
    public TestAspect testAspect() {
        return new TestAspect();
    }

}

答案 1 :(得分:2)

每次都不需要创建新的类实例来验证它是否是电子邮件。您可以将isValidEmail放入static课程。

我建议您使用此代码进行验证:

final String email = etEmail.getText().toString();

boolean isEmail = isValidEmail(email);

有功能:

public final static boolean isValidEmail(String text) {
    if (target == null) {
        return false;
    } else {
        return android.util.Patterns.EMAIL_ADDRESS.matcher(text).matches();
    }
}

在您的活动声明中:

private EditText etMail;

然后在您的onCreate方法中setContentView

之后
etMail = (EditText) findViewById(R.id.edit_text);

然后根据需要多次调用上面的方法。

答案 2 :(得分:1)

您的Edittext未声明:

EditText etEmail

宣布etMail

etMail = (EditText) findViewById(R.id.MYEDITTEXT);

答案 3 :(得分:0)

添加构造函数并在单击侦听器中输入try / catch并添加异常e,或者可以使用代码执行if / else

EmailValidator validation = new EmailValidator() ;

String email = etEmail.getText().toString();
if (validation.validate(email) == true) {
    Toast.makeText(getApplicationContext(), "it sent!!!!.", Toast.LENGTH_LONG).show();
} else {
    Toast.makeText(getApplicationContext(), "Wrong email format.", Toast.LENGTH_LONG).show();
}