按钮 onClick 上的异常行为

Unsual behaviour on onClick of Button

在我的应用程序中点击按钮注册用户首先我验证表单,没有字段应该为空,然后我调用 2 个函数,一个是从地址获取 Lat Long,另一个是成功后的电子邮件身份验证将数据推送到数据库。

registerButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                   registerFormValidation();

               /* getLocationFromAddress(userAddress);
                    getEmailAuth(); */

我评论了这两个函数,因为当我点击注册按钮时,它直接给我异常,即电子邮件和密码对于 createuserwithemailpassword 为空,而没有验证 form.Then 我将这两个函数粘贴到 registerFormValidation() 中,例如 this.But 它不会进入 else 语句并且不调用这两个函数,虽然它的验​​证形式正确但在验证之后它不会进入这两个函数的 else 语句

private void registerFormValidation() {

        username = userName.getText().toString();
        userEmail = email.getText().toString();
        birthDate = dob.getText().toString();
        userAddress = address.getText().toString();
        userPassword = password.getText().toString();
        rePassword = confirmPassword.getText().toString();

        if (TextUtils.isEmpty(username)) {
            HelperClass.showSnakbarMsg(rootView, Constants.usernameRequired);
            userName.requestFocus();
        } else if (TextUtils.isEmpty(userEmail)) {
            HelperClass.showSnakbarMsg(rootView, Constants.emailRequired);
            email.requestFocus();
        } else if (!isValidEmail(userEmail)) {
            HelperClass.showSnakbarMsg(rootView, Constants.emailFormat);
            email.requestFocus();

        } else if (TextUtils.isEmpty(birthDate)) {
            HelperClass.showSnakbarMsg(rootView, Constants.bithDateRequired);
            dob.requestFocus();

        } else if (TextUtils.isEmpty(userAddress)) {
            HelperClass.showSnakbarMsg(rootView, Constants.addressRequired);
            address.requestFocus();

        } else if (TextUtils.isEmpty(userPassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.passwordRequired);
            password.requestFocus();

        } else if (TextUtils.isEmpty(rePassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.repassword);
            confirmPassword.requestFocus();
        } else if (TextUtils.isEmpty(gender)) {
            HelperClass.showSnakbarMsg(rootView, Constants.gender);

        } else if (!userPassword.equals(rePassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.matchPassword);
            password.requestFocus();

        }  else  {
            getLocationFromAddress(userAddress);
            getEmailAuth();
        } 

这是我的全部class

public class RegisterActivity extends AppCompatActivity {

    EditText userName, email, phoneNum, dob,  password, confirmPassword, address;
    RadioGroup radioGroup;
    Button registerButton, pickAddress;
    TextView alreadyHaveAccount, diseasesType;
    LinearLayout donarLayout;
    RelativeLayout rootView;
    private String mobileNum, username, userEmail, birthDate, userAddress, userPassword, rePassword,gender,  userID;
    ArrayList<String> selection = new ArrayList<String>();
    ImageView calendar, calendar1;
    DatabaseReference databaseReference;
    FirebaseAuth firebaseAuth;
    LatLng p1 = null;
    double latitude;
    double longitude;

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

        viewDecleration();
        clickFunctionalitites();

    }

    private void viewDecleration() {
        databaseReference = FirebaseDatabase.getInstance().getReference().child(Constants.content).child(Constants.profiles);

        progressDialog = HelperClass.showProgressDialog(this, Constants.progressMsg);
        progressDialog.dismiss();
        rootView = findViewById(R.id.parentView);

        userName = findViewById(R.id.etuserName);
        email = findViewById(R.id.etEmail);
        phoneNum = findViewById(R.id.etPhoenNum);
        dob = findViewById(R.id.etDob);
        lasTimeDonated = findViewById(R.id.etLastTimeDonated);
        address = findViewById(R.id.etAddress);
        height = findViewById(R.id.etHeight);
        weight = findViewById(R.id.etWeight);
        password = findViewById(R.id.etPassword);
        confirmPassword = findViewById(R.id.etConfirm);

        radioGroup = findViewById(R.id.sexGroup);

        bloodDonater = findViewById(R.id.checkbox_donar);
        checkHepatitis = findViewById(R.id.checkbox_hepatitis);
        checkBp = findViewById(R.id.checkbox_bp);
        checkAids = findViewById(R.id.checkbox_aids);
        checkCancer = findViewById(R.id.checkbox_cancer);
        checkAllergy = findViewById(R.id.checkbox_allergy);
        checkSugar = findViewById(R.id.checkbox_sugar);
        checkTatto = findViewById(R.id.checkbox_tatto);

        alreadyHaveAccount = findViewById(R.id.loginFromSignup);

        registerButton = findViewById(R.id.btnRegister);
        pickAddress = findViewById(R.id.pickAddress);

        donarLayout = findViewById(R.id.donateBlodLayout);

        calendar = findViewById(R.id.calendar);
        calendar1 = findViewById(R.id.calendar1);

    }

    private void registerFormValidation() {

        username = userName.getText().toString();
        userEmail = email.getText().toString();
        birthDate = dob.getText().toString();
        userAddress = address.getText().toString();
        userPassword = password.getText().toString();
        rePassword = confirmPassword.getText().toString();

        if (TextUtils.isEmpty(username)) {
            HelperClass.showSnakbarMsg(rootView, Constants.usernameRequired);
            userName.requestFocus();
        } else if (TextUtils.isEmpty(userEmail)) {
            HelperClass.showSnakbarMsg(rootView, Constants.emailRequired);
            email.requestFocus();
        } else if (!isValidEmail(userEmail)) {
            HelperClass.showSnakbarMsg(rootView, Constants.emailFormat);
            email.requestFocus();

        } else if (TextUtils.isEmpty(birthDate)) {
            HelperClass.showSnakbarMsg(rootView, Constants.bithDateRequired);
            dob.requestFocus();

        } else if (TextUtils.isEmpty(userAddress)) {
            HelperClass.showSnakbarMsg(rootView, Constants.addressRequired);
            address.requestFocus();

        } else if (TextUtils.isEmpty(userPassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.passwordRequired);
            password.requestFocus();

        } else if (TextUtils.isEmpty(rePassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.repassword);
            confirmPassword.requestFocus();

        } else if (TextUtils.isEmpty(gender)) {
            HelperClass.showSnakbarMsg(rootView, Constants.gender);

        } else if (!userPassword.equals(rePassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.matchPassword);
            password.requestFocus();

        } else {
             getLocationFromAddress(userAddress);
            getEmailAuth();
        }

    }


    private void donarLayoutCheck() {

        if (bloodDonater.isChecked()) {
            donarCheck = "yes";
            donarLayout.setVisibility(View.VISIBLE);
        } else {
            donarCheck = "no";
            donarLayout.setVisibility(View.GONE);
        }

    }

    private void clickFunctionalitites() {

        bloodDonater.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (bloodDonater.isChecked()) {
                    donarLayout.setVisibility(View.VISIBLE);
                } else {
                    donarLayout.setVisibility(View.GONE);
                }
            }
        });


        registerButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
//                progressDialog.show();
                        registerFormValidation();
getLocationFromAddress(userAddress);
               getEmailAuth();
            }
        });

    }

    private void getEmailAuth() {
        Toast.makeText(this, "emai", Toast.LENGTH_SHORT).show();
        firebaseAuth = FirebaseAuth.getInstance();
        firebaseAuth.createUserWithEmailAndPassword(userEmail, userPassword).
                addOnCompleteListener(new OnCompleteListener<AuthResult>() {
                    @Override
                    public void onComplete(@NonNull Task<AuthResult> task) {
                        if (!task.isSuccessful()) {
                            String error;
                            try {
                                progressDialog.dismiss();
                                throw task.getException();
                            } catch (FirebaseAuthWeakPasswordException e) {
//                               password.setError(getString(Constants.error_weak_password));
                                progressDialog.dismiss();
                                error = e.getMessage();
                                HelperClass.showSnakbarMsg(rootView, error);
                                password.requestFocus();
                            } catch (FirebaseAuthInvalidCredentialsException e) {
                                progressDialog.dismiss();
                                error = e.getMessage();
                                HelperClass.showSnakbarMsg(rootView, error);
                                email.requestFocus();
                            } catch (FirebaseAuthUserCollisionException e) {
                                progressDialog.dismiss();
                                error = e.getMessage();
                                HelperClass.showSnakbarMsg(rootView, error);
                                email.requestFocus();
                            } catch (Exception e) {
                                progressDialog.dismiss();
                                error = e.getMessage();
                                HelperClass.showSnakbarMsg(rootView, error);
                            }


                        } else {
                            Toast.makeText(RegisterActivity.this, "Auth success", Toast.LENGTH_SHORT).show();
                            if (firebaseAuth.getCurrentUser() != null) {
                                userID = firebaseAuth.getCurrentUser().getUid();
                            }
                            pushData();
                        }
                    }
                });
    }

    private void pushData() {
        databaseReference = FirebaseDatabase.getInstance().getReference().child(Constants.content).child(Constants.profiles).child(userID);
        HashMap userMap = new HashMap();

        userMap.put("name", username);
        userMap.put("email", userEmail);

        userMap.put("dob", birthDate);
        userMap.put("last_blood_donation", lastDonation);
        userMap.put("donar", donarCheck);
        userMap.put("height", userHeight);
        userMap.put("weight", userWeight);
        userMap.put("address", userAddress);
/*        userMap.put("latitude", userLat);
        userMap.put("longitude", userLong);*/
//        userMap.put("password", userPassword);
        userMap.put("gender", gender);
        userMap.put("diseases", final_checkBox_selection);

        databaseReference.updateChildren(userMap).addOnCompleteListener(new OnCompleteListener() {
            @Override
            public void onComplete(@NonNull Task task) {
                if (task.isSuccessful()) {
                    progressDialog.dismiss();
                    Toast.makeText(RegisterActivity.this, "Task successfull", Toast.LENGTH_SHORT).show();

                } else {
                    progressDialog.dismiss();
                    Toast.makeText(RegisterActivity.this, "fail", Toast.LENGTH_SHORT).show();

                }
            }
        });

    }


    public final static boolean isValidEmail(CharSequence target) {
        if (target == null)
            return false;

        return android.util.Patterns.EMAIL_ADDRESS.matcher(target).matches();
    }

    public LatLng getLocationFromAddress(String strAddress) {
        Toast.makeText(this, "emai", Toast.LENGTH_SHORT).show();

        Geocoder coder = new Geocoder(this);
        List<Address> address;

        try {
            // May throw an IOException
            address = coder.getFromLocationName(strAddress, 5);
            if (address == null) {
                progressDialog.dismiss();
                return null;
            }
            try {
                Address location = address.get(0);
                latitude = location.getLatitude();
                longitude = location.getLongitude();
                userLat = String.valueOf(latitude);
                userLong = String.valueOf(longitude);
                System.out.println("add" + latitude + " , " + longitude);

                p1 = new LatLng(location.getLatitude(), location.getLongitude());
            } catch (Exception e) {
                progressDialog.dismiss();
                Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
            }

        } catch (IOException ex) {
            progressDialog.dismiss();
            Toast.makeText(this, "Address not found", Toast.LENGTH_LONG).show();
        }
        return p1;
    }
}

我重复我的问题,如果我在注册点击按钮上放置三个函数,它会直接给我异常而不调用 registerFormValidation,如果我只在注册点击按钮上调用注册表单验证函数,它不会进入 else 语句,也不会调用其他两个功能。 有点奇怪,但不知道为什么会这样

如果没有进入else if (!isValidEmail(userEmail)),那么说明它前面的if语句返回false,直接进入最后一个else语句。因此,而不是做 if..else if ..,你只需要使用 if 来检查每个案例:

   if (TextUtils.isEmpty(username)) {
            HelperClass.showSnakbarMsg(rootView, Constants.usernameRequired);
            userName.requestFocus();
        } 
   if (TextUtils.isEmpty(userEmail)) {
            HelperClass.showSnakbarMsg(rootView, Constants.emailRequired);
            email.requestFocus();
        } 
   if (!isValidEmail(userEmail)) {
            HelperClass.showSnakbarMsg(rootView, Constants.emailFormat);
            email.requestFocus();

        } 
   if (TextUtils.isEmpty(birthDate)) {
            HelperClass.showSnakbarMsg(rootView, Constants.bithDateRequired);
            dob.requestFocus();

        } 
    if (TextUtils.isEmpty(userAddress)) {
            HelperClass.showSnakbarMsg(rootView, Constants.addressRequired);
            address.requestFocus();

        } 
    if (TextUtils.isEmpty(userPassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.passwordRequired);
            password.requestFocus();

        } 
    if (TextUtils.isEmpty(rePassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.repassword);
            confirmPassword.requestFocus();
        } 
    if (TextUtils.isEmpty(gender)) {
            HelperClass.showSnakbarMsg(rootView, Constants.gender);

        } 
    if (!userPassword.equals(rePassword)) {
            HelperClass.showSnakbarMsg(rootView, Constants.matchPassword);
            password.requestFocus();

        }  else  {
            getLocationFromAddress(userAddress);
            getEmailAuth();
        }