【问题标题】:How to get data from Real-Time Database in Firebase如何从 Firebase 中的实时数据库中获取数据
【发布时间】:2016-08-18 17:12:47
【问题描述】:

我在这个设置中使用了实时数据库:

->users
    ->uid
        ->name
        ->email
        ->other info

如果我想保存用户数据,我会使用我的 User 类,然后像这样在数据库中设置对象:

//assume variables have already been declared...

mFirebaseAuth = FirebaseAuth.getInstance();
mFirebaseUser = mFirebaseAuth.getCurrentUser();
User user = new User(name, email, other values...);
mDBRef.child("users").child(mFirebaseUser.getUid()).setValue(user);

我试过了,效果很好。

但是我怎样才能从数据库中检索这些值呢?例如,一旦我如上所示设置了一个用户对象,我可能想要检索用户的电子邮件。我的意思不是通过登录提供商获取电子邮件。我想要通过实时数据库的电子邮件。我已经尝试了一段时间,但文档并没有太大帮助。它显示的只是设置侦听器以等待数据更改。但我不是在等待变化,我不想要一个听众。我想通过使用 JSON 树中的键直接获取数据库中的值。这可以通过实时数据库实现吗?如果是这样,怎么办,因为文档没有解释它或者我只是不理解它。如果不可能,我应该使用存储数据库还是其他东西?谢谢。

【问题讨论】:

  • 从 Firebase 数据库获取数据的方法是附加一个监听器。见firebase.google.com/docs/database/android/retrieve-data
  • @FrankvanPuffelen 我相信你是在 Firebase 工作过的工程师之一? (看到你回答了很多关于它的帖子)。如果是这样,我认为按照 Ian Richard 在他对讨论听众的文档的回答的 cmets 中解释的方式添加解释将非常有帮助。

标签: android firebase firebase-realtime-database


【解决方案1】:

Firebase 使用侦听器获取数据。这就是它工作方式的本质。虽然,您可以使用单个事件侦听器(相当于只抓取一次数据)。它将立即触发并获取数据,并且不会再次触发。这是获取当前用户电子邮件的代码示例:

//Get User ID
final String userId = getUid();

//Single event listener
mDatabase.child("users").child(userId).addListenerForSingleValueEvent(
    new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            // Get user value
            User user = dataSnapshot.getValue(User.class);

            //user.email now has your email value
        }
    });

【讨论】:

  • 好的,但我担心的是当数据更改时会发生这种情况,不是吗?如果我没有在数据库中添加或修改任何内容但我想要某个用户的数据怎么办?
  • 不,这是一个值事件侦听器,将立即获取预期数据。 onDataChange 方法只是抓取数据快照,而不是等待任何更改。
  • 这个人很混乱。考虑到 Listeners 的本质以及“onDataChange”这个名字,我永远不会知道。不过感谢您的解释,这正是我所需要的!
  • 非常好的东西。但我对 uid 有疑问。如果我在另一台设备上使用相同的凭据登录,uid 会相同还是会改变
  • @NarenderReddy 我几乎没看到这条评论。但是,是的,一旦 Uid 存储到数据库中,它在使用任何平台(Android、iOS 和 Web)的任何设备上都是相同的。数据存储在云端,因此使用 Firebase 的简单电子邮件/密码登录功能,它可以从数据库中检索该 Uid。因此,数据在任何设备和平台上都保持不变。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-17
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 2021-04-08
  • 1970-01-01
  • 2019-02-26
相关资源
最近更新 更多