【问题标题】:Change password for Parse.com Android (Front-end check)更改 Parse.com Android 的密码(前端检查)
【发布时间】:2015-11-12 00:19:30
【问题描述】:

我正在尝试在提交表单之前进行密码检查,但我没有得到想要的行为。基本上,无论用户为任一字段输入什么内容,它都会从 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();
                        }
                    });

                }
            }

【问题讨论】:

  • 您的意思是从未显示任何对话框?
  • 我只是想要它,以便只有在密码不同时才会出现对话框。我猜它认为密码字段包含相同的字符串,因为它们没有在 onClick 中更新。

标签: java android parse-platform passwords


【解决方案1】:
    final String mNewPassword = mNewPasswordField.getText().toString();
    final String mConfirmPassword = mConfirmPasswordField.getText().toString();

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

这两个String应该在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))) {

..

【讨论】:

    【解决方案2】:

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

       mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
    
                mNewPassword = mNewPasswordField.getText().toString();
                mConfirmPassword = mConfirmPasswordField.getText().toString();
    
                if (!(mNewPassword.equals(mConfirmPassword))) {
                    ....
                } else {
                    ....
                }
            }
        });
    

    【讨论】:

      【解决方案3】:

      我应该向其他通过的人提一下,您还需要在 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))) {
                  ..
      

      【讨论】:

      • 不,只要将 Edittexts 声明为最终的(或全局的),就像您对字符串所做的那样
      猜你喜欢
      • 2014-10-19
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2012-07-31
      • 2017-03-18
      相关资源
      最近更新 更多