2017-12-13 4 views
0

パスワード値を更新したい場合は、パスワードを変更するために、ユーザ名を入力し、ユーザ名と一致する親ノードを検索します。 enter image description here ここに私のコードは、私の質問は、私はその値を変更するノードを取得する方法である、と私は、ボタンを押すたびに、パスワードの値は変更されません親ノードと照合してデータを更新する - Firebaseデータベース

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()); 
     } 
    }); 

} 

です。

ありがとうございました。

EDITED

@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); 
} 

私はこの活動を開始するたびに、それはあなたがJavaで2つの文字列を比較したい場合は、equalsメソッドを使用する必要がonCancelled(DatabaseError){Toast.makeText(..., "Database Error", ...).show();}

+0

すべてのテキスト入力により、問題の内容を確認することが難しくなります。 'username'のハードコードされた値で問題を再現できますか? –

+0

一見したところ、これは疑わしいです: 'if(username.matches(ds.getKey())){'。あなたは 'username.equals(ds.getKey)'を使うつもりでしたか? –

+0

これらのif-else文は、.matchesを.equalsに変更した後でEditTextに値があるかどうかをチェックするだけで、プログラムは停止します。 – Mike

答えて

1

ですぐにエラーになりますmatchesではありません。

matchesメソッドは、この文字列が指定された正規表現と一致するかどうかを示します。

フォームstr.matches(正規表現)のこのメソッドの呼び出しが発現

java.util.regex.Pattern.matches(正規表現、STR)と正確に同じ結果が得られます。

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); 
rootRef.child("users").child("brian").child("password").setValue("newPassword"); 
:あなたが唯一のこのような言及に setValue()方法で直接使用する必要があり、パスワードを変更するには

username.equals(ds.getKey()) 

username.matches(ds.getKey()) 

だから、このコード行を変更

+0

まだ、いいえ、プログラムは最終的に停止します。 – Mike

+0

エラーは何ですか? –

+0

デバッグ後、プログラムは停止しませんが、パスワードは変更されません – Mike

関連する問題