【发布时间】:2017-12-13 01:13:14
【问题描述】:
我想更新我的密码值,我将输入用户名并搜索与用户名文本匹配的父节点以更改密码。 这是我的代码
db = FirebaseDatabase.getInstance().getReference();
logIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
progressDialog.setMessage("Changing Password");
newPassword();
progressDialog.dismiss();
Toast.makeText(getApplicationContext(), "Change successful.", Toast.LENGTH_LONG).show();
}
});//inside of onCreate method
private void newPassword(){
if(TextUtils.isEmpty(userText.getText().toString().trim())){
progressDialog.dismiss();
Toast.makeText(this, "Input username.", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(emailText.getText().toString().trim())){
progressDialog.dismiss();
Toast.makeText(this, "Input email.", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(contactText.getText().toString().trim())){
progressDialog.dismiss();
Toast.makeText(this, "Input contact no.", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(firstText.getText().toString().trim())){
progressDialog.dismiss();
Toast.makeText(this, "Input first name.", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(lastText.getText().toString().trim())){
progressDialog.dismiss();
Toast.makeText(this, "Input last name.", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(password.getText().toString().trim())){
progressDialog.dismiss();
Toast.makeText(this, "Input password.", Toast.LENGTH_LONG).show();
return;
}
if(TextUtils.isEmpty(retype.getText().toString().trim())){
progressDialog.dismiss();
Toast.makeText(this, "Input retype password.", Toast.LENGTH_LONG).show();
return;
}
db.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
String username = userText.getText().toString().trim();
for(DataSnapshot ds: dataSnapshot.getChildren()){
if(username.matches(ds.getKey())){
user.setPassword(password.getText().toString().trim());
ds.getRef().child(username).child("password").setValue(user.getPassword());
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d("User", databaseError.getMessage());
}
});
}
我的问题是如何到达要更改其值的节点,并且每次按下按钮时,密码的值都不会改变。
感谢您的帮助。
已编辑
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_forgot_password);
...
progressDialog = new ProgressDialog(this);
db = FirebaseDatabase.getInstance().getReference();
db.child("users").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
username = (String)dataSnapshot.child(userText.getText().toString().trim()).child("username").getValue();
address = (String)dataSnapshot.child(userText.getText().toString().trim()).child("address").getValue();
contact = (String)dataSnapshot.child(userText.getText().toString().trim()).child("contact").getValue();
email = (String)dataSnapshot.child(userText.getText().toString().trim()).child("email").getValue();
first = (String)dataSnapshot.child(userText.getText().toString().trim()).child("first").getValue();
last = (String)dataSnapshot.child(userText.getText().toString().trim()).child("last").getValue();
pass = passwordText.getText().toString().trim();
}
@Override
public void onCancelled(DatabaseError databaseError) {
Toast.makeText(ForgotPassword.this, "Database Error", Toast.LENGTH_LONG).show();
Intent i = new Intent(ForgotPassword.this, SignIn.class);
startActivity(i);
}
});
logIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
newPassword();
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ForgotPassword.this, SignIn.class);
startActivity(i);
}
});
}
private void newPassword(){
...
user = new User(first, last, email, contact, pass, username, address);
db.child("users").child(username).setValue(user);
Toast.makeText(getApplicationContext(), "Change successful.", Toast.LENGTH_LONG).show();
Intent i = new Intent(this, TabMenu.class);
startActivity(i);
}
每次我开始这个活动时,它都会立即在onCancelled(DatabaseError){Toast.makeText(..., "Database Error", ...).show();}上给出错误
【问题讨论】:
-
所有文本输入都让人很难看出问题所在。你能用
username的硬编码值重现问题吗? -
乍一看这看起来很可疑:` if(username.matches(ds.getKey())){
. Did you mean to useusername.equals(ds.getKey)`? -
那些 if-else 语句只检查 EditText 是否有值,在将 .matches 更改为 .equals 后,程序将停止。
-
经过一些调试,程序不会停止但密码不会改变
-
在这种情况下,请使用硬编码值重现问题并更新问题中的代码。这将使提供帮助变得更加容易,进而改善我们能够提供帮助的变革。
标签: android json firebase-realtime-database