Java 如何更新Firebase JSON节点中的特定字段

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

我正在开发地理位置Android应用程序,它使用Firebase作为后端和数据库

这是我数据库中数据的结构

下面是mu User.java类

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