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 FirebaseRecyclerAdapter仍显示所有项目。不应该显示任何_Android_Firebase_Firebase Realtime Database_Firebaseui - Fatal编程技术网

Android FirebaseRecyclerAdapter仍显示所有项目。不应该显示任何

Android FirebaseRecyclerAdapter仍显示所有项目。不应该显示任何,android,firebase,firebase-realtime-database,firebaseui,Android,Firebase,Firebase Realtime Database,Firebaseui,我希望FirebaseRecyclerAdapter检查是否有以电子邮件地址结尾的邀请,并显示UID。不知何故,它输出了所有数据,就好像没有过滤和排序一样 下面是json数据 "invites" : { "4u60kmvvO9TwzBrLpP5SG4ICU9r1_test5%2E@test%2Etest" : { "cost" : "2", }, "4u60kmvvO9TwzBrLpP5SG4ICU9r1_test4@test%2Etest" : { "costs"

我希望FirebaseRecyclerAdapter检查是否有以电子邮件地址结尾的邀请,并显示UID。不知何故,它输出了所有数据,就好像没有过滤和排序一样

下面是json数据

"invites" : {
  "4u60kmvvO9TwzBrLpP5SG4ICU9r1_test5%2E@test%2Etest" : {
    "cost" : "2",
  },
  "4u60kmvvO9TwzBrLpP5SG4ICU9r1_test4@test%2Etest" : {
    "costs" : "0"
  },
  "UQW5VEAojMOyB2WGTU9aTPUBepg1_test6%2E@test%2Etest" : {
    "costs" : "0"      
  }
}
我想设置FirebaseRecyclerAdapter。这是适配器

 mAdapter = new FirebaseRecyclerAdapter<Event, UserHolder>(
      Event.class, 
      R.layout.layout, 
      UserHolder.class, 
      ref.child("invites").orderByKey().endAt(encodeAsFirebaseKey(email))
 ) {}
它回来了test@test%2Etest

     protected void populateViewHolder(final UserHolder viewHolder, Event model, final int position) {
     final String key = this.getRef(position).getKey().split("_")[0];
            viewHolder.setName(key);     
            }

您似乎混淆了
endAt()
的工作原理。它匹配所有字符串,以您传递的参数开头的字符串结尾。它不匹配以您传递的参数结尾的字符串

因此
endAt(“4U60KMVVO9TWZBRLP5SG4ICU9R1_test4@test%2测试“
匹配:

"4u60kmvvO9TwzBrLpP5SG4ICU9r1_test5%2E@test%2Etest" : {
  "cost" : "2",
},
"4u60kmvvO9TwzBrLpP5SG4ICU9r1_test4@test%2Etest" : {
  "costs" : "0"
},

但是
endAt(“test@test%2Etest“
不返回任何内容,因为没有键以它开头。

这取决于
encodeAsFirebaseKey(email)
返回的值。你能用一个硬编码的值而不是那个调用重现这个问题吗?它返回test@test%2Etest。应该可以。似乎应该更改数据结构,以便能够按子级进行筛选。这是很奇怪的,因为电子邮件作为密钥和子密钥的一部分被重复使用。
"4u60kmvvO9TwzBrLpP5SG4ICU9r1_test5%2E@test%2Etest" : {
  "cost" : "2",
},
"4u60kmvvO9TwzBrLpP5SG4ICU9r1_test4@test%2Etest" : {
  "costs" : "0"
},