首页 > 解决方案 > Firebase-realtime-database:更改密码按钮

问题描述

我正在尝试编写一个允许用户更改密码的活动。但我很难让它运行......我不知道问题出在哪里。我对此很陌生,所以这可能是绝对愚蠢的事情:DI 非常感谢您的帮助。先感谢您!

我尝试使用 getValue(Password.class) 从我的 Firebase 数据库中的表中读取密码,如果 if 子句中的条件符合,它应该使用 ref.setValue(newpass) 用新密码覆盖旧密码。这甚至可以这样工作?!

public class ChangePwActivity extends AppCompatActivity {
    Button back, change;
    TextView oldpw,newpw,newpwrep;
    final FirebaseDatabase smartlockgj= FirebaseDatabase.getInstance();
    final DatabaseReference ref= smartlockgj.getReference("data/password");





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_change_pw);
            back=  findViewById(R.id.btback);
            change= findViewById(R.id.btchangepw);
            oldpw= findViewById(R.id.oldpw);
            newpw= findViewById(R.id.newpw);
            newpwrep= findViewById(R.id.newpwrep);

            back.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    startActivity(new Intent(ChangePwActivity.this, MainActivity.class));
                }
            });

            change.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ref.addValueEventListener(new ValueEventListener(){
                        @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            Password pw = dataSnapshot.getValue(Password.class);
                            String oldpass = oldpw.getText().toString();
                            String newpass = newpw.getText().toString();
                            String newpassrep = newpwrep.getText().toString();
                            if (pw.getPassword() == oldpass) {
                                if (newpass == newpassrep) {
                                    ref.setValue(newpass);

                                    }
                                else{
                                    //PushupNote einfügen"New password does not match"
                                    }


                                }
                            else {
                                //PushupNote einfügen:"Old Password was incorrect"
                                }


                            }

                        @Override
                        public void onCancelled(@NonNull DatabaseError databaseError) {

                        }
                    });


                }


                    });

        }






    }

密码.java

public class Password {
 private String password;

 public void setPassword(String password) {
  this.password = password;
 }
 public String getPassword() {
  return password;
 }
 public Password() {}

 public Password(String password) {
  this.password = password;
 }

}

标签: javaandroidfirebase-realtime-database

解决方案


每当比较字符串时,通常首选使用 TextUtils,在您的情况下,我认为使用

                       @Override
                        public void onDataChange(DataSnapshot dataSnapshot) {
                            Password pw = dataSnapshot.getValue(Password.class);
                            String oldpass = oldpw.getText().toString();
                            String newpass = newpw.getText().toString();
                            String newpassrep = newpwrep.getText().toString();
// here change these
                            if (TextUtils.equal(pw.getPassword(),oldpass)) {
                                if (TextUtils.equal(newpass,newpassrep)) {
                                    ref.setValue(newpass);

                                    }
                                else{
                                    //PushupNote einfügen"New password does not match"
                                    }


                                }
                            else {
                                //PushupNoteeinfügen:"Old Password was incorrect"
                                }


                            }

但在我看来,我也希望你推荐,如果可能的话,在你的项目中使用 firebase auth 进行身份验证,并使用用户的 uuid 到实时数据库的文档中,做相关的逻辑。


推荐阅读