java - 从 firebase 检索单个条目

标签 java android firebase firebase-realtime-database

下面是我的 Firebase 数据。

users
    a81b0dec-671e-4840-9977-e932274928fb  
       email: "s@s.com"
       screenname: "SSS"
       totalmoney: "0"
       uid: "a81b0dec-671e-4840-9977-e932274928fb"
    c934beeb-51d2-4919-bff0-64153abff1dd
       email: "p@p.com"
       screenname: "PPP"
       totalmoney: "0"
       uid: "c934beeb-51d2-4919-bff0-64153abff1dd"
    e0187af9-20a9-4088-a86c-7fb8cf3b4d47
       email: "o@o.com"
       screenname: "OOO"
       totalmoney: "0"
       uid: "e0187af9-20a9-4088-a86c-7fb8cf3b4d47"

如何检索 uid = "a81b0dec-671e-4840-9977-e932274928fb"的节点。 这是我到目前为止所尝试过的,但它不起作用。

String uid = "a81b0dec-671e-4840-9977-e932274928fb";
Query query = fb.orderByChild("uid").equalTo(uid);
            query.addListenerForSingleValueEvent(new ValueEventListener() {

                @Override
                public void onDataChange(DataSnapshot data) {
                    // TODO Auto-generated method stub
                    Log.i("SINGLE VALUE EVENT", data.toString());
                }

                @Override
                public void onCancelled(FirebaseError error) {
                    // TODO Auto-generated method stub

                }
            });

最佳答案

您当前的代码执行查询。由于查询可以匹配多个子节点,因此它返回一个值列表。即使只有一个匹配结果,它也会返回一个列表。

您可以在代码中通过迭代子项来处理此问题:

public void onDataChange(DataSnapshot data) {
  for (DataSnapshot userSnap: data.getChildren) {
    Log.i("SINGLE VALUE EVENT", userSnap.child("email").getValue(String.class));
  }
}

但在这种情况下,您甚至不需要查询,因为您(明智地)还将用户存储在其 uid 下。这意味着您可以通过该 uid 直接访问用户,这样可以节省一些代码并且速度会更快:

String uid = "a81b0dec-671e-4840-9977-e932274928fb";
DatabaseReference user = fb.child(uid);
user.addListenerForSingleValueEvent(new ValueEventListener() {
  public void onDataChange(DataSnapshot data) {
    Log.i("SINGLE VALUE EVENT", data.child("email").getValue(String.class));
  }
  public void onCancelled(FirebaseError error) {
    Log.e(TAG, error);
  }
});

关于java - 从 firebase 检索单个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37372614/

相关文章:

java - PhantomJS多次加载同一页面不起作用,无法清除缓存

android - 图片 View : image change animation

java - 如果我们将 SessionScoped bean 注入(inject)到 Stateless bean 中,如果没有 HTTP session 会发生什么?

java - JPanel 矩形覆盖;不会删除

android - 是否可以通过Activity从 fragment 中调用ViewModel方法,或者这是一种不好的做法?

Android 模拟器相机显示 block

Android 应用程序不显示从 Cloud Functions 发送的弹出通知

javascript - 来自 Web 表单的数据未添加到 Firebase

javascript - 在我单击 UI 之前,signInWithPopup Promise 不会执行 .catch。 Angular 和 Firebase

java - 使用 Weka 在 Java 中进行文档聚类