Java 如何更新Firebase JSON节点中的特定字段
我正在开发地理位置Android应用程序,它使用Firebase作为后端和数据库 这是我数据库中数据的结构 下面是mu User.java类Java 如何更新Firebase JSON节点中的特定字段,java,android,json,firebase,firebase-realtime-database,Java,Android,Json,Firebase,Firebase Realtime Database,我正在开发地理位置Android应用程序,它使用Firebase作为后端和数据库 这是我数据库中数据的结构 下面是mu User.java类 @IgnoreExtraProperties public class User { public String fullName; public String email; public String longitude; public String latitude; public String getLon
@IgnoreExtraProperties
public class User {
public String fullName;
public String email;
public String longitude;
public String latitude;
public String getLongitude() {
return longitude;
}
public void setLongitude(String longitude) {
this.longitude = longitude;
}
public String getLatitude() {
return latitude;
}
public void setLatitude(String latitude) {
this.latitude = latitude;
}
public User() {
}
public String getFullName() {
return fullName;
}
public void setFullName(String fullName) {
this.fullName = fullName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
我想做的事
我希望我的应用程序正在更新我目前正在使用的用户的JSON节点。这是图片上显示的两个字段经度和纬度。
我现在是怎么做的
我现在从user.java类创建user,然后通过setLongitude和setLatidude添加数据,然后调用setValue方法。
这是为它剪下的代码
dbRef = FirebaseDatabase.getInstance().getReference();
mAuth = FirebaseAuth.getInstance();
User user = new User();
String currentUserId = mAuth.getCurrentUser().getUid();
user.setLatitude(String.valueOf(userLocation.latitude));
user.setLongitude(String.valueOf(userLocation.longitude));
dbRef.child("users").child(currentUserId).setValue(user).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.i("Info", "updateUser:success");
} else {
Log.i("Info", "updateUser:failure");
}
}
});
怎么了
此时,我没有更新数据库,取而代之的是,我删除了字段,然后添加了经度和纬度字段。上图也显示了这一点。
问题是在设置纬度和经度时没有设置全名和电子邮件,那么这些字段为空。setValue将删除旧对象并添加字段为空的新对象。您应该执行updateChildren而不是setValue
如果将电子邮件和全名与纬度和经度一起设置,则可以继续使用代码。好的,我之前有过类似的设置,但后来我决定使用getter和setter,因为如果这样,我可以更轻松地获得值。知道我现在如何检索数据了吗?一旦数据库中有了整个对象,就可以使用旧的addValueEventListener和getValueUser.class检索它。您的对象将被完全解析,因为您现在在数据库中拥有了所有内容。
Map<String, Object> latLong = new HashMap<>();
latLong.put("latitude", "123");
latLong.put("longitude", "123");
dbRef.child("users").child(currentUserId).updateChildren(latLong).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.i("Info", "updateUser:success");
} else {
Log.i("Info", "updateUser:failure");
}
}
});