java - 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;
}
}
解决方案
每当比较字符串时,通常首选使用 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 到实时数据库的文档中,做相关的逻辑。
推荐阅读
- visual-c++ - 不存在将“char”转换为“std::string”的合适构造函数
- go - 从列表框中反复添加和删除行最终会因 SIGSEGV 崩溃
- python - 多处理:断言 self._popen 是无,'不能启动一个进程两次'
- c++ - 找到向量中的最大值和最小值
- r - 如何使用for循环求几何级数之和
- gremlin - 使用 Gremlin,当使用具有多个属性的 groupCount() 时,如何对结果进行排序?
- jquery - Bootstrap-4 禁用点击
- javascript - 如何为android studio制作过滤器和单词替换方法
- reactjs - Typescript - 缺少类型化道具的组件不会引发错误
- ios - 从 Documents 访问照片时出现 RAM 问题?