Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 子级中包含读取规则的父级上的事件值侦听器_Android_Firebase_Firebase Realtime Database - Fatal编程技术网

Android 子级中包含读取规则的父级上的事件值侦听器

Android 子级中包含读取规则的父级上的事件值侦听器,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我正在尝试建立一个数据库,其中包含用户发布的帖子,只有订阅该帖子的人才能看到该帖子。 这里的问题是,我在父节点上添加了一个事件侦听器,希望它返回只应用于在子节点中编写的读取规则的子节点,我知道“规则不是过滤器”在fire base的文档中,我无法找到一个时间/内存效率高的设计,我只能检索适用于我的规则的帖子。 那是我的数据库 { "Users" : { // ids of users using the app "6Ya6nxqRy1fKt4BUOOh1brCJzvi2" : tru

我正在尝试建立一个数据库,其中包含用户发布的帖子,只有订阅该帖子的人才能看到该帖子。 这里的问题是,我在父节点上添加了一个事件侦听器,希望它返回只应用于在子节点中编写的读取规则的子节点,我知道“规则不是过滤器”在fire base的文档中,我无法找到一个时间/内存效率高的设计,我只能检索适用于我的规则的帖子。 那是我的数据库

{
  "Users" : { // ids of users using the app
    "6Ya6nxqRy1fKt4BUOOh1brCJzvi2" : true,
    "Nxmo8Wlhlcg4GDvh7ZIAnmBbpS82" : true,
  },
  "followers" : {
    "6Ya6nxqRy1fKt4BUOOh1brCJzvi2" : { //followers to the user with this id 
      "Nxmo8Wlhlcg4GDvh7ZIAnmBbpS82" : false,
      "n9jTaFVPDNh6bJSSZZCT20UFA972" : true
    },
    "Nxmo8Wlhlcg4GDvh7ZIAnmBbpS82" : {
      "6Ya6nxqRy1fKt4BUOOh1brCJzvi2" : true,
      "n9jTaFVPDNh6bJSSZZCT20UFA972" : true
    }
  },
  "posts" : {
    "-M3YxODIv6frqFyGM4Nm" : { //post with a random generated Id
      "img" : "cd4aaff5-cab9-44d6-b7d9-7587ed2f19fc",
      "post" : "See this cool character !!",
      "user" : "Nxmo8Wlhlcg4GDvh7ZIAnmBbpS82"
    }
  }
}
} 这就是我想申请的

 {
 "rules": {
        ".write": true ,
        "posts":{
         "$pid":{
             ".read": "data.child('user').val()===auth.uid ||root.child('followers').child(auth.uid).child(data.child('user').val()).val()=== true "
           }
        },
        "followers":{
              ".read": true
        },
        "Users":{    
              ".read": true,
        }
     }
 }
当我想在“posts”节点上添加事件监听器,但由于它没有read:true,所以它不返回任何内容时,就会出现问题

我能想到的唯一解决方案是在相同级别的帖子上创建另一棵树,该树将包含所有帖子名称,然后我开始在每个帖子节点上创建单个事件侦听器(将子帖子替换为子帖子(posts+post[I]))


有没有更好的选择,因为在100篇文章的情况下,我会做100个单事件任务,我认为这是不必要的时间、内存和互联网消耗

为每篇文章单独发出一个请求几乎没有你想象的那么慢,因为Firebase可以通过现有连接来处理这些请求。请看是否保证按我要求的顺序退货?是否有可能要求5在要求1之前退货(是的。由于所有请求都经过一个连接,所以数据库保证按顺序处理,结果也保证按顺序返回。为每个帖子单独发出一个请求并不像你想象的那么慢,因为Firebase可以通过现有连接将这些请求管道化。看到了吗?它保证返回iTEM与我请求的顺序相同吗?请求5是否有可能在请求1之前返回?:(是的。由于所有请求都通过单个连接,数据库保证它们按顺序处理,结果也保证按顺序返回。