Firebase单值事件侦听器不返回

时间:2016-05-27 00:47:42

标签: java android firebase

我已经在我的应用中成功使用Firebase几个月了。我刚刚完成更新以使用9.0.0版本,我还有一个问题,我无法弄清楚。

在我的MainActivity onCreate功能中,我检查用户是否已登录Firebase。如果用户已登录,则我尝试获取我在数据库中的用户对象。

这是应用程序中唯一遇到此问题的实例。我已经验证用户已登录,并且DatabaseReference指向正确的URL。

创建了DatabaseReference,并添加了侦听器,但侦听器上没有任何内容触发......

    FirebaseAuth auth = FirebaseAuth.getInstance();

    if (auth != null && auth.getCurrentUser() != null) {
        DatabaseReference userRef = FirebaseDatabase.getInstance().getReference().child(USERS).child(auth.getCurrentUser().getUid());
        userRef.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                // Logic for success is here...
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

                // Logic for failure is here...
            }
        });
    }

关于我做错了什么的想法?

2 个答案:

答案 0 :(得分:4)

项目配置存在问题,导致Firebase身份验证令牌无法正常刷新。您需要在Firebase控制台中为您的应用添加SHA-1指纹。

转到Firebase控制台中项目的概述页面。选择相关应用的设置溢出菜单,然后单击"管理"。将有一个按钮来添加SHA-1值。

您可以按照this guide中的步骤获取应用的SHA-1值。您可能需要重新下载并再次将google-services.json文件添加到Android Studio中的应用中,但我没有。

Firebase团队成员回答的类似stackoverflow question包含更多详细信息(如果需要)。

答案 1 :(得分:0)

如果您未通过任何方法对用户进行身份验证,则需要将规则更改为

{
    "rules": {
        ".read": "auth == null",
        ".write": "auth == null"  
    }
}

确保访问数据库不需要身份验证。