Android FirebaseRecyclerAdapter仍显示所有项目。不应该显示任何
我希望FirebaseRecyclerAdapter检查是否有以电子邮件地址结尾的邀请,并显示UID。不知何故,它输出了所有数据,就好像没有过滤和排序一样 下面是json数据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"
"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"
},