Java Android firebase查询,仅获取一个结果。按下按钮时会产生不同的结果

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); 目的是

这就是我试图使用的代码。每次按下一个按钮,计数器1就会增加1。计数器2是数据库中variablex等于已登录用户variablex的用户数

 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;
    }