onClick Sign Up method includes onClick Datepicker, how to make it work?

Phil D :

Using Firebase to save User's information by Registering/SignUp. Then I met an obstacle....

I'm using switch case for onClick, which one is for registerpage() method which in form of Button & another for going to next activity via textview. But at the registerpage() method, there is a onClick DatePicker (for selecting dateOfBirth) . But the onClick for DatePicker doesn't work. Here's my code. Thank you.

registerPage.java

package com.example.sportsbuddyz;

import android.app.DatePickerDialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.media.tv.TvContract;
import android.nfc.Tag;
import android.support.annotation.NonNull;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;

public class registerPage extends AppCompatActivity implements View.OnClickListener {

    EditText jEmailEt, jPasswordEt;
    Button jSignUpBtn;
    ProgressDialog progressDialog;
    private FirebaseAuth mAuth;
    TextView jAccountExist;

    EditText jName, jStudentID, jPhoneNumber, jAddress;
    TextView jDOB, jAutoAge;

    DatePickerDialog.OnDateSetListener mDateSetListener;

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

        jEmailEt = findViewById(R.id.emailEt);
        jPasswordEt = findViewById(R.id.passwordEt);
        //jSignUpBtn = findViewById(R.id.signupBtn);
        mAuth = FirebaseAuth.getInstance();
        //jAccountExist = findViewById(R.id.accountExist);

        jName = findViewById(R.id.nameEt);
        jStudentID = findViewById(R.id.studentIDEt);
        jPhoneNumber = findViewById(R.id.phoneEt);
        jAddress = findViewById(R.id.addressEt);

        jDOB = findViewById(R.id.DOB);
        jAutoAge = findViewById(R.id.AgeAuto);

        ActionBar actionBar = getSupportActionBar();
        actionBar.setTitle("Sign Up Account");

        actionBar.setDisplayHomeAsUpEnabled(true);
        actionBar.setDisplayShowHomeEnabled(true);

        progressDialog = new ProgressDialog(this);
        progressDialog.setMessage("Progressing User...");


        findViewById(R.id.signupBtn).setOnClickListener(this);
        findViewById(R.id.accountExist).setOnClickListener(this);
        findViewById(R.id.DOB).setOnClickListener(this);

    }


    @Override
    public void onClick(View view){
        switch (view.getId()){

            //CASE 1 -- SignUp Button
            case R.id.signupBtn:{
                    registerUser();
            }
            break;

            //CASE 2 -- AccountExist(Text)
            case R.id.accountExist: {
                startActivity(new Intent(registerPage.this, loginPage.class));
                finish();
            }
            break;
        }
    }

    private void registerUser(){
        progressDialog.show();

        String email = jEmailEt.getText().toString().trim();
        String password = jPasswordEt.getText().toString().trim();
        String name = jName.getText().toString().trim();
        String studentID = jStudentID.getText().toString().trim();
        String phoneNo = jPhoneNumber.getText().toString().trim();
        String address = jAddress.getText().toString().trim();


        if (email.isEmpty()) {
            jEmailEt.setError("Email must not be empty");
            jEmailEt.setFocusable(true);
            return;
        }
        if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) {
            jEmailEt.setError("Invalid Email");
            jEmailEt.setFocusable(true);
            return;
        }
        if (password.isEmpty()) {
            jPasswordEt.setError("Password must not be empty");
            jPasswordEt.setFocusable(true);
            return;
        }
        if (password.length() < 6) {
            jPasswordEt.setError("Password must be at least 6 digit");
            jPasswordEt.setFocusable(true);
            return;
        }
        if (name.isEmpty()) {
            jName.setError("Name must not be empty");
            jName.setFocusable(true);
            return;
        }
        if (studentID.isEmpty()) {
            jStudentID.setError("Student ID must not be empty");
            jStudentID.setFocusable(true);
            return;
        }
        if (phoneNo.isEmpty()) {
            jPhoneNumber.setError("Phone Number must not be empty");
            jPhoneNumber.setFocusable(true);
            return;
        }
        if (address.isEmpty()) {
            jAddress.setError("Address must not be empty");
            jAddress.setFocusable(true);
            return;
        }

        jDOB.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Calendar calendar = Calendar.getInstance();
                int year = calendar.get(Calendar.YEAR);
                int month = calendar.get(Calendar.MONTH);
                int day = calendar.get(Calendar.DAY_OF_MONTH);

                DatePickerDialog datePickerDialog = new DatePickerDialog(registerPage.this, android.R.style.Theme_Holo_Dialog_MinWidth, mDateSetListener, year, month, day);
                datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                datePickerDialog.show();

            }
        });

        mDateSetListener = new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int month, int day) {

                month = month + 1;
                String dobDate = day + "/" + month + "/" + year;
                jDOB.setText(dobDate);

                jAutoAge.setText(getAge(year, month, day));
            }
        };



        mAuth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (task.isSuccessful()) {
                            // Sign in success, dismiss dialog & start register activity
                            progressDialog.dismiss();

                            //User userDetail = new User(email, name, studentID, phoneNo, address);

                            FirebaseUser user = mAuth.getCurrentUser();
                            //Get User email and UID from auth
                            String email = user.getEmail();
                            String uid = user.getUid();
                            String name = jName.getText().toString().trim();
                            String studentID = jStudentID.getText().toString().trim();
                            String phoneNo = jPhoneNumber.getText().toString().trim();
                            String address = jAddress.getText().toString().trim();
                            String DOB = jDOB.getText().toString().trim();
                            String Age = jAutoAge.getText().toString().trim();

                            //User is registered store user info in Firebase realtime database also
                            HashMap<Object,String> hashMap = new HashMap<>();
                            //Put Info in HashMap
                            hashMap.put("email",email);
                            hashMap.put("uid",uid);
                            hashMap.put("name", name);
                            hashMap.put("studentID", studentID);
                            hashMap.put("phone",phoneNo);
                            hashMap.put("address",address);
                            hashMap.put("Date Of Birth", DOB);
                            hashMap.put("Age",Age);
                            hashMap.put("image","");
                            hashMap.put("cover","");
                            //Firebase database instance
                            FirebaseDatabase database = FirebaseDatabase.getInstance();
                            //path to store user data named "Users"
                            DatabaseReference reference = database.getReference("Users");
                            //Put data within HashMap in database
                            reference.child(uid).setValue(hashMap);

                            Toast.makeText(registerPage.this, "Registered..\n"+user.getEmail(), Toast.LENGTH_SHORT).show();
                            startActivity(new Intent(registerPage.this, dashBoard.class));
                            finish();
                        } else {
                            // If sign in fails, display a message to the user.
                            progressDialog.dismiss();
                            Toast.makeText(registerPage.this, "Authentication failed.",
                                    Toast.LENGTH_SHORT).show();
                        }

                    }
                }).addOnFailureListener(new OnFailureListener() {
            @Override
            public void onFailure(@NonNull Exception e) {
                progressDialog.dismiss();
                Toast.makeText(registerPage.this, ""+e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        });
    }

    private String getAge(int year, int month, int day){

        Calendar dob = Calendar.getInstance();
        Calendar today = Calendar.getInstance();

        dob.set(year, month, day);

        int age = today.get(Calendar.YEAR) - dob.get(Calendar.YEAR);

        if (today.get(Calendar.DAY_OF_YEAR) < dob.get(Calendar.DAY_OF_YEAR)){
            age--;
        }

        Integer ageInt = new Integer(age);
        String ageS = ageInt.toString();

        return ageS;
    }

    @Override
    public boolean onSupportNavigateUp(){
        onBackPressed();
        return super.onSupportNavigateUp();
    }

    @Override
    public void onPointerCaptureChanged(boolean hasCapture) {

    }
}

registerpage.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".registerPage">


    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">
            <!--Confirm Sign Up Button-->
            <Button
                android:id="@+id/signupBtn"
                style="@style/Widget.AppCompat.Button.Small"
                android:layout_width="163dp"
                android:layout_height="47dp"
                android:layout_centerHorizontal="true"
                android:background="@drawable/loginbutton"
                android:text="Sign Up"
                android:layout_below="@id/accountExist"
                android:layout_margin="10dp"
                android:textAllCaps="false"
                android:textStyle="bold" />

            <!--EmailAddress-->
            <android.support.design.widget.TextInputLayout
                android:id="@+id/emailTIL"
                android:layout_width="325dp"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="120dp">
                <EditText
                    android:id="@+id/emailEt"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="Email Address"
                    android:inputType="textEmailAddress" />
            </android.support.design.widget.TextInputLayout>


            <!--Password-->
            <android.support.design.widget.TextInputLayout
                android:id="@+id/passwordTIL"
                android:layout_width="325dp"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                android:layout_below="@+id/emailTIL"
                app:passwordToggleEnabled="true">
                <EditText
                    android:id="@+id/passwordEt"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="Password"
                    android:inputType="textPassword" />
            </android.support.design.widget.TextInputLayout>

            <!--Name-->
            <android.support.design.widget.TextInputLayout
                android:id="@+id/nameTIL"
                android:layout_width="325dp"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                android:layout_below="@+id/passwordTIL"
                app:passwordToggleEnabled="true">
                <EditText
                    android:id="@+id/nameEt"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="Full Name"
                    android:inputType="textPersonName" />
            </android.support.design.widget.TextInputLayout>

            <!--Student ID-->
            <android.support.design.widget.TextInputLayout
                android:id="@+id/studentIDTIL"
                android:layout_width="325dp"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                android:layout_below="@+id/nameTIL"
                app:passwordToggleEnabled="true">
                <EditText
                    android:id="@+id/studentIDEt"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="Student ID" />
            </android.support.design.widget.TextInputLayout>

            <!--Phone Number-->
            <android.support.design.widget.TextInputLayout
                android:id="@+id/phoneTIL"
                android:layout_width="325dp"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                android:layout_below="@+id/studentIDTIL"
                app:passwordToggleEnabled="true">
                <EditText
                    android:id="@+id/phoneEt"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="Phone No."
                    android:inputType="phone" />
            </android.support.design.widget.TextInputLayout>

            <!--DOB-->
            <TextView
                android:id="@+id/DOB"
                android:layout_width="150dp"
                android:layout_height="50dp"
                android:layout_marginBottom="140dp"
                android:textAlignment="center"
                android:hint="Date of Birth"
                android:layout_below="@+id/addressTIL"
                android:layout_marginTop="10dp"
                android:layout_marginLeft="30dp"
                android:textSize="20dp"/>

            <!--Age-->
            <TextView
                android:id="@+id/AgeAuto"
                android:layout_width="150dp"
                android:layout_height="50dp"
                android:layout_marginBottom="140dp"
                android:textAlignment="center"
                android:hint="Age"
                android:layout_toRightOf="@+id/DOB"
                android:layout_below="@id/addressTIL"
                android:layout_margin="10dp"
                android:layout_marginLeft="10dp"
                android:textSize="20dp"/>

            <!--Address-->
            <android.support.design.widget.TextInputLayout
                android:id="@+id/addressTIL"
                android:layout_width="325dp"
                android:layout_height="wrap_content"
                android:layout_centerVertical="true"
                android:layout_centerHorizontal="true"
                android:layout_below="@+id/phoneTIL"
                app:passwordToggleEnabled="true">
                <EditText
                    android:id="@+id/addressEt"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="Address"
                    android:inputType="textShortMessage"/>
            </android.support.design.widget.TextInputLayout>

            <!--Already Register? Login now-->
            <TextView
                android:id="@+id/accountExist"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="140dp"
                android:textAlignment="center"
                android:text="Already have account? Login now"
                android:layout_below="@+id/AgeAuto"
                android:layout_margin="10dp"/>

        </RelativeLayout>

    </ScrollView>

</RelativeLayout>
Muhamed El-Banna :

You registered the click listener twice

onClick in xml and setOnClickListener in java code

So you have to remove one of them .. in your case remove onClickListener and put your code in switch case

@Override
public void onClick(View view){
    switch (view.getId()){
    case R.id.DOB:
            Calendar calendar = Calendar.getInstance();
            int year = calendar.get(Calendar.YEAR);
            int month = calendar.get(Calendar.MONTH);
            int day = calendar.get(Calendar.DAY_OF_MONTH);

            DatePickerDialog datePickerDialog = new DatePickerDialog(registerPage.this, android.R.style.Theme_Holo_Dialog_MinWidth, mDateSetListener, year, month, day);
            datePickerDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            datePickerDialog.show();
    break;
    }
}

Guess you like

Origin http://10.200.1.11:23101/article/api/json?id=409979&siteId=1