【问题标题】:remove pushed item from firebase从 Firebase 中删除推送的项目
【发布时间】:2016-03-18 20:25:48
【问题描述】:

如何删除具有特定值的推送项目? 我有一些带有 2 个键的推送项目:deviceToken 和 UserID。 我需要删除带有特定 deviceToken 的项目。

    dev-app
        push
            asdasdasdasda(generated key)
                deviceToken: 12345678
                userID: qwerty
            dgfgdfghhdfgd(generated key)
                deviceToken: 87654321
                userID: sdaerty

    I need to remove the the 1-st one (which has a DeviceToken with value "12345678").

【问题讨论】:

  • 你的数据结构是什么样的(请添加为文本,不要截图)?另外:你已经尝试过什么了吗? Firebase 有很好的documentation on querying,也有很多questions covering Firebase Queries
  • @FrankvanPuffelen 我已经编辑了我的问题 - 结构更高。你能帮我吗?)

标签: android firebase firebase-realtime-database


【解决方案1】:

要获取基于deviceToken 的子项,可以执行如下查询:

Firebase ref = new Firebase("https://dev-app.firebaseio.com/push");
Query queryRef = ref.orderByChild("deviceToken").equalTo(12345678);
queryRef.addChildEventListener(new ChildEventListener() {
  @Override
  public void onChildAdded(DataSnapshot snapshot, String previousChild) {
    System.out.println(snapshot.getKey());
  }
  // ....
});

我刚刚从 Firebase documentation on queries 复制了这个 sn-p 并将其修改为您的数据。

【讨论】:

  • 新文档怎么样?您能否提供一个获取参考的示例,例如 /node/ 以便我可以在列表视图中使用 .removeValue() 。我的问题是我试图在列表中获取正确的推送键,以便我可以在 /nodes 下引用该键,然后删除该单个项目而不是整个节点引用,这就是 mDatabase.child("nodes") .removeValue() 目前确实如此。当我想要 mDatabase.child("nodes").child(pushedKey).removeValue() 之类的东西时。你有这方面的例子吗?
  • 当我向节点发送数据时,它看起来像这样。 mDatabase.child("nodes").push().setValue(POJO);