更改 Parse.com Android 的密码(前端检查)

Change password for Parse.com Android (Front-end check)

我试图在提交表单之前进行密码检查,但我没有得到想要的结果。基本上无论用户在这两个字段中输入什么,它都会从 mConfirmPasswordField 提交新密码。我想要发生的是,如果密码不匹配,因此 if (!(mNewPassword.equals(mConfirmPassword)),然后会显示一个警告对话框,仅此而已。根据下面的代码,这似乎应该是这种情况,但它只是将新密码保存给用户。我在这里做错了什么?

        mNewPasswordField = (EditText)findViewById(R.id.newPassword);
        mConfirmPasswordField = (EditText)findViewById(R.id.newPasswordAgain);

        final String mNewPassword = mNewPasswordField.getText().toString();
        final String mConfirmPassword = mConfirmPasswordField.getText().toString();

        mNewPasswordField.setText(mNewPassword);
        mConfirmPasswordField.setText(mConfirmPassword);

        Button mButton = (Button) findViewById(R.id.submitPasswordChanges);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if (!(mNewPassword.equals(mConfirmPassword))) {
                    AlertDialog.Builder builder = new AlertDialog.Builder(ChangePasswordActivity.this);
                    builder.setMessage("Please check that you've entered and confirmed your new password!")
                            .setTitle("Error:")
                            .setPositiveButton(android.R.string.ok, null);
                    AlertDialog dialog = builder.create();
                    dialog.show();

                } else {

                    setProgressBarIndeterminateVisibility(true);

                    //Update user
                    ParseUser user = ParseUser.getCurrentUser();
                    user.setPassword(mConfirmPasswordField.getText().toString());

                    user.saveInBackground(new SaveCallback() {
                        public void done(com.parse.ParseException e) {
                            // TODO Auto-generated method stub
                            LaunchPersonalGalleryIntent();
                        }
                    });

                }
            }

我认为问题在于您没有更新字段:您应该在用户单击按钮时立即检查新值,例如:

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

            mNewPassword = mNewPasswordField.getText().toString();
            mConfirmPassword = mConfirmPasswordField.getText().toString();

            if (!(mNewPassword.equals(mConfirmPassword))) {
                ....
            } else {
                ....
            }
        }
    });
    final String mNewPassword = mNewPasswordField.getText().toString();
    final String mConfirmPassword = mConfirmPasswordField.getText().toString();

这将在 EditText 仍然为空时执行,因此 mNewPassword 等于 mConfirmPassword 等于 ""

这两个字符串应该在onClick:

内检索
..
mButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
             final String mNewPassword = mNewPasswordField.getText().toString();
             final String mConfirmPassword = mConfirmPasswordField.getText().toString();

            if (!(mNewPassword.equals(mConfirmPassword))) {

..

我应该提醒其他经过的人,您还需要在 onClick 方法中包括以下字段以及密码字符串。

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

            mNewPasswordField = (EditText)findViewById(R.id.newPassword);
            mConfirmPasswordField = (EditText)findViewById(R.id.newPasswordAgain);

            final String mNewPassword = mNewPasswordField.getText().toString();
            final String mConfirmPassword = mConfirmPasswordField.getText().toString();

            mConfirmPasswordField.setText(mConfirmPassword);

            if (!(mNewPassword.equals(mConfirmPassword))) {
            ..