Java 通过搜索firebase android的子值在列表中获取uid

Java 通过搜索firebase android的子值在列表中获取uid,java,android,arrays,firebase,firebase-realtime-database,Java,Android,Arrays,Firebase,Firebase Realtime Database,这是我的数据库。我想让所有用户都使用相同的variablex。但我只需要id,即父节点。我想构建一个数组,其中包含子值variablex相同的用户的所有ID。然后使用这个数组一次调用一个用户,获取id,用它执行其他任务,等等 { "Mp6FLLdcSeXpfGPwP5i0ZBNZxd63" : { "Age" : "20", "Full name" : "Mike", "Intent" : "Both", "Reward" : "Nothing ",

这是我的数据库。我想让所有用户都使用相同的variablex。但我只需要id,即父节点。我想构建一个数组,其中包含子值variablex相同的用户的所有ID。然后使用这个数组一次调用一个用户,获取id,用它执行其他任务,等等

{
  "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"
  }
}
public void othershit(){
Query qname3=mDatabase.child(“Variablex”).orderByChild(“Variablex”).equalTo(userinput);
qname3.addListenerForSingleValueEvent(新的ValueEventListener()){
@凌驾
public void onDataChange(@NonNull DataSnapshot DataSnapshot){
GenericTypeIndicator t=新的GenericTypeIndicator();
列表用户=dataSnapshot.getValue(t);
textView8.setText(users.get(0.toString());
}
这是由一个按钮触发的,但每次它都会崩溃。另外,我有三个用户具有相同的variablex。结构相同,这是我的数据库的一个有点过时的版本,但本质上是相同的。

尝试使用

public void othershit() {

    Query qname3 = mDatabase.child("Variablex").orderByChild("Variablex").equalTo(userinput);
    qname3.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            GenericTypeIndicator<List<String>> t = new GenericTypeIndicator<>();
            List users = dataSnapshot.getValue(t);
            textView8.setText(users.get(0).toString());
        }
检索找到的节点的父项,在您的情况下,该节点是FUID

编辑-

假设所有数据的父节点都是用户

dataSnapshot.getKey();
因此,下面是您需要做的事情,以获得与所需ID匹配的所有ID的列表

{
  "users" :{
"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"
  }
}
}
List userid=new Arraylist();
Query qname3=mDatabase.child(“用户”).child(“Variablex”).orderByChild(“Variablex”).equalTo(用户输入)…addValueEventListener(新的ValueEventListener()){
@凌驾
公共void onDataChange(DataSnapshot DataSnapshot){
add(dataSnapshot.getKey());
}
@凌驾
取消后的公共无效(FirebaseError FirebaseError){
}
});

共享您的崩溃报告。如果您的
dataSnapshot.getKey()
返回您的列表,则
users.getKey()
应该会返回给你
Mp6FLLdcSeXpfGPwP5i0ZBNZxd63
。我无法在android studio上运行它,我正在设备上运行它,无法获得崩溃报告。我还需要一个符合查询条件的所有ID的列表,而不仅仅是第一个。这样我就可以获得第二个和第三个ID,依此类推。@mikekioullmikekioulepoglou你说你想获得所有的ID吗具有相同variablex的用户,即
一个名称
?请用@回复。抱歉,我提到过,我的实际firebase数据库在相同的结构中有更多用户,具有相同的子级,只是每个子级的值不同,每个ID不同。其中一些在子variablex中具有相同的值。我想获取这些值。我只是将这段数据库作为示例发布。好的,谢谢,但是我如何获得所有具有相等variablex值的FUID的列表?这只会给我第一个。我需要获得第二个,然后是第三个等。一次一个。谢谢!出于某种原因,这只返回variablex。甚至不返回其中的值(一个名称)。我需要父级。由于所有用户都是root的子级,所以我将执行mDatabase.child(“Variablex”).orderbychild(“Variablex”).equalto(userinput);然后执行userIds.add(datasnapshot.getKey()),然后通过textview.settext(userIds.get(0))显示结果您需要首先调用父节点查询qname3=mDatabase.child(“users”).child(“Variablex”).orderByChild(“Variablex”).equalTo(userinput)…addValueEventListener(new ValueEventListener(),用户就是您可以看到的父节点,所以请检查您的父节点并按照我所说的做
    List<String> userIds = new Arraylist<>();

        Query qname3 = mDatabase.child("users").child("Variablex").orderByChild("Variablex").equalTo(userinput)..addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
          userIds.add(dataSnapshot.getKey());
        }

        @Override
        public void onCancelled(FirebaseError firebaseError) {

            }
    });