【问题标题】:Get uid in list by searching child values firebase android通过搜索子值firebase android获取列表中的uid
【发布时间】:2019-02-01 19:13:15
【问题描述】:
{
  "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"
  }
}

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

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

这是通过按钮触发的,但每次它都会崩溃。我也有三个具有相同变量的用户。结构是一样的,这是我的数据库的一个有点过时的版本,但它本质上是一样的。

【问题讨论】:

  • 分享您的崩溃报告。
  • 如果您的dataSnapshot.getKey() 返回您的列表,那么users.getKey() 应该返回您Mp6FLLdcSeXpfGPwP5i0ZBNZxd63
  • 我无法在 android studio 上运行它,我正在设备上运行它,但我无法获得崩溃报告。我还需要一个符合查询条件的所有 id 的列表,而不仅仅是第一个。所以我可以得到第二个和第三个等等。
  • @MikeKioulMikeKioulepoglou 你说你想让所有用户使用相同的变量x,即one name?请回复@。
  • 对不起,我提到过,我的实际 firebase 数据库在相同的结构中有更多的用户,具有相同的孩子,只是每个孩子的值不同,每个孩子的 id 不同。其中一些在子变量 x 中具有相同的值。我想得到那些。我刚刚发布了这部分数据库作为示例。

标签: java android arrays firebase firebase-realtime-database


【解决方案1】:

尝试使用

dataSnapshot.getKey();

检索找到的节点的父键,在您的情况下是 FUID。

编辑 -

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

{
  "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"
  }
}
}

因此,您需要执行以下操作来获取与所需匹配的所有 id 的列表

    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) {

            }
    });

【讨论】:

  • 好的,谢谢,但是我如何获得所有具有相同 variablex 值的流体的列表?这只会给我第一个。我需要得到第二个,然后是第三个等等。一次一个。谢谢!
  • 由于某种原因,这只返回 Variablex。甚至没有里面的值(一个名字)。我需要父母。由于所有用户都是 root 的孩子,我正在做 mDatabase.child("Variablex").orderbychild("Variablex").equalto(userinput);然后我做 userIds.add(datasnapshot.getKey());然后通过 textview.settext(userIds.get(0)); 显示结果
  • 需要先在父节点上调用child Query qname3 = mDatabase.child("users").child("Variablex").orderByChild("Variablex").equalTo(userinput).. addValueEventListener(new ValueEventListener() 这里 users 是你可以看到的父节点,所以检查你的父节点并按照我说的做
猜你喜欢
  • 1970-01-01
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-23
  • 1970-01-01
  • 2018-04-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多