更新Firebase中的某些数据,并将其他数据保留在同一“父级”中

时间:2018-10-17 19:05:21

标签: java android firebase firebase-realtime-database

我正在使用firebase在android上制作一个应用程序,但遇到了:(。我想更新firebase中的某些数据,而将其他数据保留在同一“父级”中。但是当我使用ref.updateChildren()函数时我正在丢失不变的数据:(。像这里:

开始数据(更改前)-我不想更改的数据标记为蓝色 Start data (before change) - The data that I don't want to change is marked blue

编辑器活动完成时的数据: enter image description here

我在EditorActivity中的代码:

[...]
            mEvent.setPlace(placeString);
            mEvent.setDate(dateString);
            mEvent.setType(mType);
            mEvent.setWindPower(wind_power);
            mEvent.setWaveSize(wave_size);
            mEvent.setConditions(mConditions);
            mEvent.setComment(commentString);

            Map<String, Object> eventValues = mEvent.toMap();
            Map<String, Object> childUpdates = new HashMap<>();
            childUpdates.put("/"+mEvent.getId(),eventValues);

            mEventsDatabaseReference.updateChildren(childUpdates); [...]

在Event.class上:

@Exclude
public Map<String, Object> toMap() {
    HashMap<String, Object> result = new HashMap<>();
    result.put("id", mId);
    result.put("mUsername", mUsername);
    result.put("place", mPlace);
    result.put("date", mDate);
    result.put("windPower", mWindPower);
    result.put("waveSize", mWaveSize);
    result.put("type",mType);
    result.put("comment",mComment);
    result.put("conditions",mConditions);
    result.put("photoUrl",mPhotoUrl);
    return result;
}

我知道我在“结果”和“ mEvent”中没有“ mMembers”,但是我想像在"Admin firebase"中的updateChildrenAsync()函数上那样在Firebase数据库中保持不变。可能吗?

1 个答案:

答案 0 :(得分:0)

我的朋友给我发送了一个可以解决我问题的代码,将来可能对某人有用: 在EditorActivity中:

            mEvent.setPlace(placeString);
            mEvent.setDate(dateString);
            mEvent.setType(mType);
            mEvent.setWindPower(wind_power);
            mEvent.setWaveSize(wave_size);
            mEvent.setConditions(mConditions);
            mEvent.setComment(commentString);

            Map<String, Object> eventValues = mEvent.toMap();
            mEventsDatabaseReference.child(mEvent.getId()).updateChildren(eventValues);