如何从Firebase中的实时数据库获取数据

时间:2016-08-18 17:12:48

标签: android firebase firebase-realtime-database

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

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

我尝试过它并且工作正常。

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

1 个答案:

答案 0 :(得分:5)

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