Java 使用两个文件进行电子邮件验证在Android应用程序中不起作用

Java 使用两个文件进行电子邮件验证在Android应用程序中不起作用,java,android,Java,Android,我用EditText和按钮准备了XML文件。 当我应该检查我的电子邮件时,我有两个java文件。我会按照你在其他问题中写的那样做。。。。但有点不对劲。。。。我不知道 第一个文件MainActivity.java: public class MainActivity extends AppCompatActivity { Button checkButton = (Button) findViewById(R.id.checkButton); EditTe

我用EditText和按钮准备了XML文件。 当我应该检查我的电子邮件时,我有两个java文件。我会按照你在其他问题中写的那样做。。。。但有点不对劲。。。。我不知道

第一个文件MainActivity.java:

    public class MainActivity extends AppCompatActivity {

        Button checkButton = (Button) findViewById(R.id.checkButton);
        EditText emailInput= (EditText) findViewById(R.id.emailInput);

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            checkButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    {
                        String input = emailInput.getText().toString();
                        if (isValidEmail(input)) {
                            Correct();
                        } else {
                            Incorrect();
                        }
                    }
                }
            });

        }

        public void Correct(){
            Toast.makeText(this,"Your e-mail is correct!", Toast.LENGTH_SHORT).show();
        }

        public void Incorrect(){
            Toast.makeText(this,"Your e-mail is incorrect!", Toast.LENGTH_SHORT).show();
        }
   }
第二个文件,我在其中使用了正则表达式:

    public class EmailValidator {

        public static boolean isValidEmail(CharSequence target) {

            Pattern pattern = Pattern.compile("[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,64}");

            Matcher m = pattern.matcher(target);
            return m.matches();

        }
    }

怎么了?哪里有错误 无论如何,一些显而易见的问题:

if (isValidEmail(input))
这需要限定为以下范围:

if (EmailValidator.isValidEmail(input))
除非该函数具有静态导入。这将是一个编译时错误

然后这些findViewById调用:


需要在setContentView之后。在onCreate之前,会出现NullPointerException,因为尚未设置“活动”窗口,而在setContentView之前,会返回nulls,因为此类视图不存在,从而导致稍后出现NullPointerException。这些都是运行时错误。

我也有同样的想法:怎么了?你的意见是什么?预期产出?获得的产出?
Button checkButton = (Button) findViewById(R.id.checkButton);
EditText emailInput= (EditText) findViewById(R.id.emailInput);