Is there any way to update this key in the Firebase? Seems like the value is updating but not the key itself.
I've tried using hashmap with updateChildren
and setValue as well, it is working but only the value of that key is Updating not the key itself like this:
Key No Updating
This is the code of the update button in the dialog class:
user = FirebaseAuth.getInstance().getCurrentUser();
userId = user.getUid();
reference = FirebaseDatabase.getInstance().getReference("Users").child(userId).child("Courses").child(addClassinput.getText().toString());
classBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
if(!addClassinput.getText().toString().isEmpty()){
Map<String, Object> map = new HashMap<>();
map.put("getClassName", addClassinput.getText().toString());
FirebaseDatabase.getInstance().getReference("Users") .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child("Courses").child(getClass).updateChildren(map)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void unused) {
Toast.makeText(getContext(), "Updated Successfully", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getContext(), "Error Updating!", Toast.LENGTH_SHORT).show();
}
});
}
else{
Toast.makeText(getContext(), "Invalid Input!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
});
P.S This thing surely helps: How to copy a record from a location to another in Firebase realtime database?
Here is my update of the code and it is working fine:
user = FirebaseAuth.getInstance().getCurrentUser();
userId = user.getUid();
reference = FirebaseDatabase.getInstance().getReference("Users").child(userId).child("Courses").child(getClass);
classBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
ref2 = FirebaseDatabase.getInstance().getReference("Users").child(userId).child("Courses").child(addClassinput.getText().toString());
moveRecord(reference, ref2);
FirebaseDatabase.getInstance().getReference("Users").child(userId).child("Courses").child(getClass).removeValue();
reference.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot snapshot) {
String key = snapshot.getKey();
if(!addClassinput.getText().toString().isEmpty()){
Map<String, Object> map = new HashMap<>();
map.put("getClassName", addClassinput.getText().toString());
FirebaseDatabase.getInstance().getReference("Users") .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
.child("Courses").child(addClassinput.getText().toString()).updateChildren(map)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void unused) {
Toast.makeText(getContext(), "Updated Successfully!", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getContext(), "Error Updating!", Toast.LENGTH_SHORT).show();
}
});
}
else{
Toast.makeText(getContext(), "Invalid Input!", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
}
});
private void moveRecord(DatabaseReference fromPath, final DatabaseReference toPath) {
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
toPath.setValue(dataSnapshot.getValue()).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isComplete()) {
Log.d(TAG, "Success!");
} else {
Log.d(TAG, "Copy failed!");
}
}
});
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore potential errors!
}
};
fromPath.addListenerForSingleValueEvent(valueEventListener);
}