【问题标题】:Get Uid from firebase从 firebase 获取 Uid
【发布时间】:2016-10-30 13:36:26
【问题描述】:

我正在尝试从 firebase 中查找 uid。假设我的数据库中有 3 个用户,我想找到第三个用户 uid。

这里是 json 格式女巫只是从 firebase 导出:

{
  "-KVKrXu70Ziw0iRw46l5" : {
    "age" : 20,
    "emailId" : "ameerhamza",
    "name" : "hamza"
  },
  "-KVKrkVy5OojpsSUEI24" : {
    "age" : 20,
    "emailId" : "ameerhamza",
    "name" : "hamza"
  },
  "-KVKrkzXy9duyiZq5bM0" : {
    "age" : 21,
    "emailId" : "ameerhamzaaaa",
    "name" : "hamza"
  },
  "-KVKrl5Ax7ptodMYywzg" : {
    "age" : 22,
    "emailId" : "ameerhamza",
    "name" : "hamza"
  },
  "-KVKrr7E6b4-3x6tuwOX" : {
    "age" : 23,
    "emailId" : "ameerhamza",
    "name" : "hamza"
  },
  "-KVKruES01regClm6tWW" : {
    "age" : 24,
    "emailId" : "ameerhamza",
    "name" : "hamza"
  }
}

这是我所做的代码。但这对我不起作用。

 final FirebaseDatabase database = FirebaseDatabase.getInstance();
        myRef = database.getReference();
       DatabaseReference newRef = myRef.push();
          i++;
                    Student s = new Student("ameerhamza",i,"hamza");
                    newRef.child(newRef.getKey()).setValue(s);
                    final Query queryRef = myRef.orderByChild("emailId").equalTo("ameerhamzaaaa");

                 queryRef.addListenerForSingleValueEvent(new ValueEventListener() {
                     @Override
                     public void onDataChange(DataSnapshot dataSnapshot) {
                         Log.d("Firebase UID ",dataSnapshot.getKey());//it always null 
                         Student s = dataSnapshot.getValue(Student.class);



                     }

                     @Override
                     public void onCancelled(DatabaseError databaseError) {

                     }
                 });

【问题讨论】:

  • 您在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 Firebase 数据库控制台中的导出按钮轻松获取该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。
  • @Frank van Puffelen 我刚刚更新了我的问题,请帮助我在过去 2 天尝试这个,但仍然注意到发生了
  • 您如何引用您的 Firebase 数据库。您的 Firebase 数据库网址在哪里?
  • 最终 FirebaseDatabase 数据库 = FirebaseDatabase.getInstance();
  • 兄弟你能检查年龄代码吗我只是更新我的Q

标签: android firebase firebase-realtime-database


【解决方案1】:

您正在创建一个额外的孩子,并且您正在父母中进行搜索。试试这样的:

final FirebaseDatabase database = FirebaseDatabase.getInstance();
myRef = database.getReference();
DatabaseReference newRef = myRef.push();

i++;
Student s = new Student("ameerhamza",i,"hamza");
newRef.setValue(s);

myRef
  .orderByChild("emailId")
  .equalTo("ameerhamzaaaa")
  .addListenerForSingleValueEvent(new ValueEventListener() {
             @Override
             public void onDataChange(DataSnapshot dataSnapshot) {
                 Map<String, Student> data = dataSnapshot.getValue(new GenericTypeIndicator<Map<String, Student>>() {});
                 Map.Entry<String, Student> entry = data.entrySet().iterator().next();
                 String uid = entry.getKey();
                 Student s = entry.getValue();
                 Log.d("Firebase UID ", uid);
             }

             @Override
             public void onCancelled(DatabaseError databaseError) {
                 // handle error
             }
  });

它可能不会为您提供确切的 ID,但应该可以让您更好地了解正在发生的事情。

【讨论】:

  • 兄弟我已经尝试过你的方法,但它似乎不适合我
  • 可能是因为您的 Firebase 存储的当前结构仍在使用双键。
  • 使用您更新问题所用的数据和我的答案中的更新代码重试。
  • 兄弟,它不是因为,但你告诉我正确的方向
【解决方案2】:

好吧,狐狸经过这么多的努力,最后我得到了我的 ANS,这是我从 firebase 获取 UID 的方法,我使用 Firebase Recyler Adapter 来获取来自 firebase 的数据,接下来你会看到自己做了什么

    adapter = new FirebaseRecyclerAdapter<Student, myViewHolader>(


            Student.class,R.layout.item_row,myViewHolader.class,myRef
    ) {
        @Override
        protected void populateViewHolder(myViewHolader viewHolder, Student model, int position) {

            Log.e("myFirebase UID",adapter.getRef(position).getKey());

        }
    };

    recyclerView.setAdapter(adapter);

【讨论】:

    猜你喜欢
    • 2018-02-08
    • 2017-06-28
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 2023-04-02
    相关资源
    最近更新 更多