[英]How to update values in android app using firebase?
嗨请找到firebase DB的结构?
现在让我们说,我们要从-LcKJ14wv-Y46QER1V- 0更新fName和lName
如何更新它们,以便仅更新这些值而不会在数据库中添加新值?
我们写的代码
queryToGetData = FirebaseDatabase.getInstance().getReference().child(AppData.STUDENTS)
.orderByChild("studentUnique").equalTo(user.getUid()).limitToFirst(1);
queryToGetData.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if(!dataSnapshot.exists()){
db.push().setValue(ss);
Common.alertDialog("Added","Profile Details saved", StudentProfile.this);
} else {
db.setValue(ss);
Common.alertDialog("Oops","Profile Updated", StudentProfile.this);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Common.alertDialog("Oops","Something went wrong!", StudentProfile.this);
}
});
这段代码在做什么?
第一次运行更新时(整个集合为空)
*第二次运行更新时(同一用户)
第三次运行更新时(同一用户)
首先,我建议像这样重构您的数据库以进行更简单的查询。
students
QslkALDJFLDFLFk(this is the student unique key or the uid)
emailAddress:
fName:
然后使用updateChildren()
更新特定字段。
Student student = new Student("firstName", "lastName");
Map<String, Object> values = student.toMap();
queryToGetData = FirebaseDatabase.getInstance().getReference()
.child(AppData.STUDENTS).child(user.getUid())
.updateChildren(values);
你可以在这里阅读文档
我正在这样做;-
DatabaseReference receiverUserRef = FirebaseDatabase.getInstance().getReference(chatListTableName)
.child(userId)
.child(firebaseUser.getUid());
receiverUserRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()) {
receiverUserRef.child("time").setValue(String.valueOf(System.currentTimeMillis()));
} else {
receiverUserRef.child("id").setValue(firebaseUser.getUid());
receiverUserRef.child("isGroup").setValue("false");
receiverUserRef.child("time").setValue(String.valueOf(System.currentTimeMillis()));
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
我同意@elbert rivas 关于使用uid
来识别您的用户而不是推送 id 的说法。 在这种情况下,要更新用户对象,您不需要查询。 但是,如果无法更改您的数据库结构,您仍然可以像以下代码行一样更新用户对象:
queryToGetData = FirebaseDatabase.getInstance().getReference().child(AppData.STUDENTS)
.orderByChild("studentUnique").equalTo(user.getUid());
ValueEventListener valueEventListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for(DataSnapshot ds : dataSnapshot.getChildren()) {
Map<String, Object> map = new HashMap<>();
map.put("fName", "newFirstName");
map.put("lName", "newLastName");
ds.getRef().updateChildren(map);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
Log.d(TAG, databaseError.getMessage()); //Don't ignore errors!
}
};
queryToGetData.addListenerForSingleValueEvent(valueEventListener);
看,我删除了.limitToFirst(1)
因为用户的uid
是唯一的。 因此,即使我们删除该方法调用,您仍然会得到一个结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.