【问题标题】:How to Append data to an Array in Firebase?如何将数据附加到 Firebase 中的数组?
【发布时间】:2016-04-16 03:01:39
【问题描述】:

我的用户节点中有一个名为subscribedTo 的数组。现在,每当订阅用户时,我想将一些 push ID's 附加到该数组。

但是push ID 被替换而不是被附加。

如何将推送 ID 附加到数组中?

架构

"tester@gmail,com": {
    "email": "tester@gmail,com",
    "hasLoggedInWithPassword": true,
    "name": "tester",
    "subscribedTo": [
      "-KFPi5GjCcGrF-oaHnjr"
    ],
    "timestampJoined": {
      "timestamp": 1459583857967
    }
  }

代码

public void onSubscribe(View v) {

        final Firebase firebaseRef = new Firebase(Constants.FIREBASE_URL);

        final HashMap<String, Object> userMap = new HashMap<String, Object>();

        pushIDList.add(PROG_ID);
        userMap.put("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo",
                pushIDList);

        firebaseRef.updateChildren(userMap, new Firebase.CompletionListener() {
            @Override
            public void onComplete(FirebaseError firebaseError, Firebase firebase) {
                Toast.makeText(ProgramDetail.this, "You are subscribed", Toast.LENGTH_SHORT).show();
            }
        });

    }

【问题讨论】:

    标签: android arrays firebase firebase-realtime-database


    【解决方案1】:

    当您使用地图调用 updateChildren() 时,Firebase 会获取每个键并将该位置的对象替换为地图中的值。

    updateChildren() 上的 Firebase 文档对此进行了说明:

    给定一个像alanisawesome 这样的单一键路径,updateChildren() 只更新第一个子级别的数据,任何传入超过第一个子级别的数据都被视为 setValue() 操作。

    因此,在您的情况下,您将替换 "/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo" 的全部内容。

    解决方案是使 PROG_ID 成为映射中键的一部分:

    userMap.put("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo/"+PROG_ID, true);
    firebaseRef.updateChildren(userMap, ...
    

    或者简单地调用 JSON 树中较低位置的setValue()

    firebaseRef.child("/" + Constants.FIREBASE_LOCATION_USERS + "/" + mEncodedEmail + "/subscribedTo/"+PROG_ID).setValue(true);
    

    您会注意到,在这两种情况下,我都摆脱了您的数组以支持recommended structure for such a so-called index

    "subscribedTo": {
      "-KFPi5GjCcGrF-oaHnjr": true
    },
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-18
      • 2015-02-04
      • 2017-01-16
      相关资源
      最近更新 更多