Reputation: 37
As a beginner to Android, I am trying to create sample app - register and log in. I am using Android Studio!
Whenever I click on register button, the Snackbar displays "Hey, all the fields are mandatory!" in spite of filling all the fields!
And the below is the code written for Registration.
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:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:showIn="@layout/app_bar_register"
tools:context=".Register">
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentTop="true">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Register"
android:id="@+id/textView1"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_gravity="center_horizontal" />
<EditText
android:id="@+id/editText1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:ems="12"
android:inputType="text"
android:hint="Name" >
</EditText>
<EditText
android:id="@+id/editText2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText1"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:ems="12"
android:inputType="phone"
android:hint="Mobile" />
<EditText
android:id="@+id/editText3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText2"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:ems="12"
android:inputType="textEmailAddress"
android:hint="Email" />
<EditText
android:id="@+id/editText4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText3"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:ems="12"
android:inputType="text"
android:hint="City" />
<EditText
android:id="@+id/editText5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText4"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:ems="12"
android:inputType="textPassword"
android:hint="Password" />
<EditText
android:id="@+id/editText6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText5"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:ems="12"
android:inputType="textPassword"
android:hint="Confirm Password" />
<Button
android:id="@+id/registerButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/editText6"
android:layout_centerHorizontal="true"
android:layout_marginTop="15dp"
android:textSize="20dp"
android:textColor="#5F3A7A"
android:text="Register" />
</LinearLayout>
</ScrollView>
Upvotes: 0
Views: 93
Reputation: 7929
Change your code like that(Move your EditText
s declaration outside the clicklistener):
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));
}
}
}
}
);
}
...
}
Upvotes: 1
Reputation: 17841
Move the below code inside onClick()
method:
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;
Currently what happens is that the above mentioned code runs once and not every time you press the button. Hence nameS
, mobileS
, etc.. are always empty. That's why it goes inside the if
block. The findViewById()
code strictly speaking need not be put inside the onClick()
method. But the part where you fetch text via getText()
should be inside the onClick()
method
It's preferable to initialize all the views in the onCreate()
right after setContentView()
Upvotes: 1