【问题标题】:Firebase search child and return parent keyFirebase 搜索子项并返回父项
【发布时间】:2018-02-21 12:04:22
【问题描述】:

我正在尝试通过对其子参数的搜索返回 Firebase 中的 UID 键值。

-Users

 -BCsuC4XAZq0MDK1taLcD2
      -Name: Test1
      -Phone:  0011223344


 -t50GPKxb8mgINGbmGJrR83
      -Name: Test2
      -Phone: 9988776655

所以从上面的这个数据库中,我试图实现一个基于电话号码的搜索功能,其中搜索“9988776655”的用户将获得“t50GPKxb8mgINGbmGJrR83”的返回值,但经过几个小时的混乱我没有更接近能够做到这一点。

这里有一个帖子: Query Firebase based on field and return parent in Android
看起来它会非常接近,但不幸的是没有提供完整的解决方案代码。在涉足它之后,我能尝试将它融入我的场景中的最好方法就是空响应。

有谁知道我怎么能做到这一点?我已经阅读了数十篇论坛帖子,并观看了几个 youtube 教程,但似乎没有人能够做到这一点。有可能吗?

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    试试这个:

    DatabaseReference ref=FirebaseDatabase.getInstance().getReference().child("Users");
     ref.orderByChild("Phone").equalTo(9988776655).addValueEventListener(new ValueEventListener(){
     @Override
    public void onDataChange(DataSnapshot dataSnapshot) { 
       for(DataSnapshot datas: dataSnapshot.getChildren()){
         String keys=datas.getKey();
      }
    
     @Override
    public void onCancelled(FirebaseError firebaseError) {
    
    
        }
       });
    

    使用上述方法,您将在数据快照Users 上,然后由于您想根据电话号码进行搜索,您可以执行此操作orderByChild("Phone").equalTo(9988776655),它将搜索与提供的值相等的电话号码。该值可以是您在此处添加的变量或字符串"9988776655"

    然后为了能够获取随机 id,您需要在直接子代中进行迭代,使用 getKey() 您将能够检索等于 9988776655 的手机的随机 id

    【讨论】:

    • 感谢您的回复,彼得。我试过了,但它不起作用。我在每一行都使用了 toast 来逐步完成,并且在这段代码之后它根本不执行任何操作: for (DataSnapshot datas : dataSnapshot.getChildren()) {有人有什么想法吗?
    • 你在orderByChild("Phone").equalTo(9988776655)这里写了什么? Users 也是根节点下的子节点吗? @Bisclavret
    • 有效!我使用了一个变量而不是 9988776655 的特定字符串值。我试图从 EditText onCreate 中获取字符串,就像一个白痴一样,这样当填充字符串时它立即变为 null。对不起,彼得,你的答案是正确的。
    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2014-11-11
    • 2021-04-26
    • 2023-01-13
    • 1970-01-01
    相关资源
    最近更新 更多