Java Android firebase查询,仅获取一个结果。按下按钮时会产生不同的结果
这就是我试图使用的代码。每次按下一个按钮,计数器1就会增加1。计数器2是数据库中variablex等于已登录用户variablex的用户数Java Android firebase查询,仅获取一个结果。按下按钮时会产生不同的结果,java,android,firebase,firebase-realtime-database,Java,Android,Firebase,Firebase Realtime Database,这就是我试图使用的代码。每次按下一个按钮,计数器1就会增加1。计数器2是数据库中variablex等于已登录用户variablex的用户数 Counter4 = Counter2 - Counter1 + 1; Query qname = mDatabase.child("variablex").equalTo(variablexofuser).getRef().getParent().limitToFirst(Counter1).limitToLast(Counter4); 目的是
Counter4 = Counter2 - Counter1 + 1;
Query qname = mDatabase.child("variablex").equalTo(variablexofuser).getRef().getParent().limitToFirst(Counter1).limitToLast(Counter4);
目的是获取满足条件的第一个用户(variablex=variablexofuser),然后是第二次按下按钮时满足条件的第二个用户,依此类推。因此,每次按下按钮基本上只能得到一个不同的结果。我的代码能用吗?如果不能,你能告诉我原因吗?有没有更简单或正确的方法来实现这一点?
谢谢大家!
Query qname3 = mDatabase.child("variablex").equalTo(variablexofuser).getRef();
qname3.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
testref = dataSnapshot.getChildrenCount();
Counter2 = (int) testref;
}
如果要使用Firebase数据库查询位置的子节点,请首先使用要排序/筛选的属性调用
orderByChild()
您还应该在查询结束时调用getRef()
,而不是not,因为这将再次为您提供未过滤的消息列表
因此:
这似乎是mDatabase.child(“variablex”).equalTo(variablexofuser)中不太可能出现的代码片段。您是否可以编辑您的问题(下面有一个链接)以包含您正在阅读的JSON片段(作为文本,无屏幕截图)?您可以通过点击您的{“Mp6FLLdcSeXpfGPwP5i0ZBNZxd63”:{“年龄”:“20”,“全名”:“Mike”,“意图”:“两者”,“奖励”:“Nothing”,“Variablex”:“one name”,“imageuri”:“images/mp6flldcsexpfgpwp5i0zbnzd63.jpeg”},“fWJcCPF16dUMKn1Sxz01VjF9Kgq2”:{“年龄”:“19”,“全名”:“其他人”,“意图”:“寻求帮助”,“奖励”:“无”,“变量X”:“一个名字”,“imageuri”:“images/fWJcCPF16dUMKn1Sxz01VjF9Kgq2”}谢谢,这很有效,但当我单击按钮执行第一个查询时(第一行代码)查询qname,使活动崩溃。这整件事的目标是,当按钮被单击一次时,将我的结果限制为第一个与登录用户具有相同变量X的用户,然后在第二次单击按钮时,将结果限制为仅符合条件的第二个用户,依此类推,直到没有更多用户可显示播放或再次显示第一个。你有什么方法可以帮我吗?我认为limittofirst和limittolast的组合是问题所在。我不知道什么是
Counter2
等。但是如果你试图进行基于偏移量的查询,Firebase就不是这样工作的。Firebase数据库查询是基于光标的,而不是基于偏移量的。所以:哟如果您知道要开始的项的variablex
值(可能还有键),您只能获取接下来的几个项。您可以将这些项传递到ref.orderByChild(“variablex”).startAt(“variablexvaluetostart”,“keyofitemtostart”).limitToFirst(1)
。
{
"Mp6FLLdcSeXpfGPwP5i0ZBNZxd63" : {
"Age" : "20",
"Full name" : "Mike",
"Intent" : "Both",
"Reward" : "Nothing ",
"Variablex" : "one name",
"imageuri" : "images/Mp6FLLdcSeXpfGPwP5i0ZBNZxd63.jpeg"
},
"fWJcCPF16dUMKn1Sxz01VjF9Kgq2" : {
"Age" : "19",
"Full name" : "Other guy",
"Intent" : "Looking for help",
"Reward" : "nothing ",
"Variablex" : "one name",
"imageuri" : "images/fWJcCPF16dUMKn1Sxz01VjF9Kgq2"
}
}
Query qname3 = mDatabase.orderByChild("variablex").equalTo(variablexofuser);
qname3.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
testref = dataSnapshot.getChildrenCount();
Counter2 = (int) testref;
}