Android中的验证问题

Android中的验证问题,android,android-studio,Android,Android Studio,作为Android的初学者,我正在尝试创建示例应用程序-注册和登录。我正在使用Android Studio 每当我点击注册按钮时,Snackbar会显示“嘿,所有字段都是必填的!”尽管所有字段都已填充 下面是注册代码 import android.content.Intent; import android.os.Bundle; import android.support.design.widget.Snackbar; import android.support.v7.app.AlertDi

作为Android的初学者,我正在尝试创建示例应用程序-注册和登录。我正在使用Android Studio


每当我点击注册按钮时,Snackbar会显示“嘿,所有字段都是必填的!”尽管所有字段都已填充

下面是注册代码

import android.content.Intent;
import android.os.Bundle;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Register extends AppCompatActivity {

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

    new AlertDialog.Builder(this)
            .setTitle("Register Guidelines")
            .setMessage("Hey!\nAll fields are mandatory!\n\nPassword must have minimum of 8 and maximum of 20 Characters in length.\n\nIt should contains atleast:\n1 CAPITAL LETTER\n1 small letter\n1 Number\nSpecial Characters among these:\n\t$ @ ! % * ? &\nDouble Click on Register to proceed!")
            .setPositiveButton("Awesome!", null)
            .show();

    setupMessageButton();

}

public void setupMessageButton() {

    final Button messageButton = (Button) findViewById(R.id.registerButton);
    messageButton.setOnClickListener(new View.OnClickListener() {

                                         @Override
                                         public void onClick(View view) {
final EditText name = (EditText) findViewById(R.id.editText1);
                                             final EditText mobile = (EditText) findViewById(R.id.editText2);
                                             final EditText email = (EditText) findViewById(R.id.editText3);
                                             final EditText city = (EditText) findViewById(R.id.editText4);
                                             final EditText password = (EditText) findViewById(R.id.editText5);
                                             final EditText confirmPassword = (EditText) findViewById(R.id.editText6);

                                             String nameS = name.getText().toString().trim();
                                             String mobileS = mobile.getText().toString().trim();
                                             String emailS = email.getText().toString().trim();
                                             String cityS = city.getText().toString().trim();
                                             String passwordS = password.getText().toString().trim();
                                             String confirmPasswordS = confirmPassword.getText().toString().trim();

                                             Intent intent;

                                             if ((nameS.equals("")) || (mobileS.equals("")) || (emailS.equals("")) || (cityS.equals("")) || (passwordS.equals("")) || (confirmPasswordS.equals(""))) {
                                                 Snackbar.make(view, "Hey, all the fields are mandatory!", Snackbar.LENGTH_LONG).show();
                                             }
                                             if (nameS.equals(matcher))
                                             {
                                                 Snackbar.make(view, "This is name.", Snackbar.LENGTH_LONG).show();
                                             }
                                             else if (isValidName(nameS) && isValidMobile(mobileS) && isValidEmail(emailS) && isValidCity(cityS) && isValidPassword(passwordS) && isValidPassword(confirmPasswordS)) {
                                                 if (confirmPasswordS.equals(passwordS)) {
                                                     Snackbar.make(view, "Credentials validated successfully.", Snackbar.LENGTH_LONG).show();
                                                     startActivity(new Intent(Register.this, SignIn.class));
                                                 }
                                             }
                                         }

                                     }
    );
}

Pattern pattern;
Matcher matcher;

public boolean isValidName(final String name) {

    final String nameRegex = "^\\p{L}+(?: \\p{L}+)*$";
    pattern = Pattern.compile(nameRegex);
    matcher = pattern.matcher(name);
    return matcher.matches();
}

public boolean isValidMobile(final String mobile) {
    final String mobilePattern = "^[7-9][0-9]{10}$";
    pattern = Pattern.compile(mobilePattern);
    matcher = pattern.matcher(mobile);
    return matcher.matches();
}

public boolean isValidEmail(final String email) {
    final String emailRegex = "^[_A-Za-z0-9-\\\\+]+(\\\\.[_A-Za-z0-9-]+)*@"+"[A-Za-z0-9-]+(\\\\.[A-Za-z0-9]+)*(\\\\.[A-Za-z]{10,})$";
    pattern = Pattern.compile(emailRegex);
    matcher = pattern.matcher(email);
    return matcher.matches();
}

public boolean isValidCity(final String city) {
    final String cityRegex = "^\\p{L}+(?: \\p{L}+)*$";
    pattern = Pattern.compile(cityRegex);
    matcher = pattern.matcher(city);
    return matcher.matches();
}

public boolean isValidPassword(final String password) {
    final String passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[$@$!%*?&])[A-Za-z\\d$@$!%*?&]{8,20}";
    pattern = Pattern.compile(passwordRegex);
    matcher = pattern.matcher(password);
    return matcher.matches();
}

}
Xml:



将以下代码移动到
onClick()方法中:

    final EditText name = (EditText) findViewById(R.id.editText1);
    final EditText mobile = (EditText) findViewById(R.id.editText2);
    final EditText email = (EditText) findViewById(R.id.editText3);
    final EditText city = (EditText) findViewById(R.id.editText4);
    final EditText password = (EditText) findViewById(R.id.editText5);
    final EditText confirmPassword = (EditText) findViewById(R.id.editText6);

    String nameS = name.getText().toString().trim();
    String mobileS = mobile.getText().toString().trim();
    String emailS = email.getText().toString().trim();
    String cityS = city.getText().toString().trim();
    String passwordS = password.getText().toString().trim();
    String confirmPasswordS = confirmPassword.getText().toString().trim();

    Intent intent;
目前的情况是,上述代码只运行一次,而不是每次按下按钮时都运行。因此,
名称
手机
,等等。。它们总是空的。这就是它进入
if
块的原因。严格来说,
findViewById()
代码不需要放在
onClick()
方法中。但是通过
getText()
获取文本的部分应该在
onClick()方法中

最好在
setContentView()

更改代码后立即初始化
onCreate()中的所有视图(将
EditText
的声明移到clicklistener之外):


你的问题是什么?每当我点击注册按钮时,Snackbar会显示“嘿,所有字段都是必填的!”尽管所有字段都已填充!您确定单击“注册”按钮时没有空的编辑文本吗?是的,我确定。事实上,在过去的30天里,我一直在想办法。所以现在我需要帮忙。不,不行,兄弟。。它甚至没有显示它用来触发的Snackbar!这是必须的。你能发布我在问题答案中所做的修改吗?final EditText name=(EditText)findViewById(R.id.editText1);最终EditText mobile=(EditText)findViewById(R.id.editText2);最终EditText电子邮件=(EditText)findViewById(R.id.editText3);最终EditText城市=(EditText)findViewById(R.id.editText4);最终EditText p=(EditText)findViewById(R.id.editText5);最终EditText cP=(EditText)findViewById(R.id.editText6);“你能把修改后的代码作为更新发布到你的问题中吗?”穆罕默德·梅杰夫看一下拉米的答案。这就是我想告诉你的
和其他行应该在
onClick()
方法中。在setupMessageButton()-onClick()@MohammedAhmedF中无法访问onCreate()中声明的对象。很抱歉,复制代码时我忘了删除EditText!检查更新。
    final EditText name = (EditText) findViewById(R.id.editText1);
    final EditText mobile = (EditText) findViewById(R.id.editText2);
    final EditText email = (EditText) findViewById(R.id.editText3);
    final EditText city = (EditText) findViewById(R.id.editText4);
    final EditText password = (EditText) findViewById(R.id.editText5);
    final EditText confirmPassword = (EditText) findViewById(R.id.editText6);

    String nameS = name.getText().toString().trim();
    String mobileS = mobile.getText().toString().trim();
    String emailS = email.getText().toString().trim();
    String cityS = city.getText().toString().trim();
    String passwordS = password.getText().toString().trim();
    String confirmPasswordS = confirmPassword.getText().toString().trim();

    Intent intent;
    public class Register extends AppCompatActivity {

                EditText name;
                EditText mobile;
                EditText email;
                EditText city;
                EditText password;
                EditText confirmPassword;

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

                new AlertDialog.Builder(this)
                        .setTitle("Register Guidelines")
                        .setMessage("Hey!\nAll fields are mandatory!\n\nPassword must have minimum of 8 and maximum of 20 Characters in length.\n\nIt should contains atleast:\n1 CAPITAL LETTER\n1 small letter\n1 Number\nSpecial Characters among these:\n\t$ @ ! % * ? &\nDouble Click on Register to proceed!")
                        .setPositiveButton("Awesome!", null)
                        .show();

                name = (EditText) findViewById(R.id.editText1);
                mobile = (EditText) findViewById(R.id.editText2);
                email = (EditText) findViewById(R.id.editText3);
                city = (EditText) findViewById(R.id.editText4);
                password = (EditText) findViewById(R.id.editText5);
                confirmPassword = (EditText) findViewById(R.id.editText6);

                setupMessageButton();

            }

            public void setupMessageButton() {

                final Button messageButton = (Button) findViewById(R.id.registerButton);
                messageButton.setOnClickListener(new View.OnClickListener() {


                                                     @Override
                                                     public void onClick(View view) {
                                                     String nameS = name.getText().toString().trim();
                                                     String mobileS = mobile.getText().toString().trim();
                                                     String emailS = email.getText().toString().trim();
                                                     String cityS = city.getText().toString().trim();
                                                     String passwordS = password.getText().toString().trim();
                                                     String confirmPasswordS = confirmPassword.getText().toString().trim();

                                                     Intent intent;
                                                         if ((nameS.equals("")) || (mobileS.equals("")) || (emailS.equals("")) || (cityS.equals("")) || (passwordS.equals("")) || (confirmPasswordS.equals(""))) {
                                                             Snackbar.make(view, "Hey, all the fields are mandatory!", Snackbar.LENGTH_LONG).show();
                                                         }
                                                         if (nameS.equals(matcher))
                                                         {
                                                             Snackbar.make(view, "This is name.", Snackbar.LENGTH_LONG).show();
                                                         }
                                                         else if (isValidName(nameS) && isValidMobile(mobileS) && isValidEmail(emailS) && isValidCity(cityS) && isValidPassword(passwordS) && isValidPassword(confirmPasswordS)) {
                                                             if (confirmPasswordS.equals(passwordS)) {
                                                                 Snackbar.make(view, "Credentials validated successfully.", Snackbar.LENGTH_LONG).show();
                                                                 startActivity(new Intent(Register.this, SignIn.class));
                                                             }
                                                         }
                                                     }

                                                 }
                );
            }
    ...
    }