Android中的验证问题
作为Android的初学者,我正在尝试创建示例应用程序-注册和登录。我正在使用Android StudioAndroid中的验证问题,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
每当我点击注册按钮时,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));
}
}
}
}
);
}
...
}