2016-06-08 85 views
9

当我的应用程序启动时,我检查Firebase数据库中的当前用户详细信息(我正在存储它的uid)。Firebase Android addListenerForSingleValueEvent有时不返回数据

我将addListenerForSingleValueEvent附加到用户的参考读取它的数据。

我的问题是,有时候,它不会返回任何价值,既不成功也不失败。

只有清除应用程序的数据才能解决它,但当然会强制用户再次登录。

我已经阅读了一些在SO的帖子,但没有找到任何解决方案。

这里是我的一段代码:

DatabaseReference newUser =  
FirebaseDatabase.getInstance().getReference("users/"+uid); 
newUser.addListenerForSingleValueEvent(new ValueEventListener()  
    @Override 
    public void onDataChange(DataSnapshot snapshot) {} 

    @Override 
    public void onCancelled(DatabaseError databaseError) {} 
}); 
+0

Quick问题:你在使用认证吗?你是否在同一个应用程序中访问多个数据库(或者你以前是否使用过相同的应用程序来访问不同的数据库)? –

+0

是的,我正在使用身份验证。我只能访问一个数据库。顺便说一句,即使重新启动设备也没有解决它。 – Adi

+0

这个问题只有在我开始使用新的SDK之后才开始。 – Adi

回答

5

我已经看到了这一点的建议是呼吁keepSynced(true)Query对象。

+0

我有addListenerForSingleValueEvent相同的问题,是第一次应用程序启动时,它的调用正常,但下次当我回来的应用程序,它不调用任何重写方法。我试过保持现在和它的工作。 –

+0

但实际上New SDK存在问题 –

0

我的猜测是user/:id不存在。仔细检查你的错误输出:

DatabaseReference newUser = FirebaseDatabase.getInstance() 
    .getReference("users") 
    .child(uid) 
    .addListenerForSingleValueEvent(new ValueEventListener()  
     @Override 
     public void onDataChange(DataSnapshot snapshot) { 
      if (snapshot.exists()) { 
       Log.i(TAG, snapshot.val()); 
      } else { 
       Log.e(TAG, "Not found: " + uid); 
      } 
     } 

     @Override 
     public void onCancelled(DatabaseError databaseError) { 
      Log.e(TAG, databaseError.toString(); 
     } 
    }); 
-1

我一直有同样的问题几天,我终于修好了。

看起来像我的Api密钥已更改!这就是阻止addListenerForSingleValueEvent()返回!
转至Firebase Console,打开您的项目,单击设置图标gear icon并转至项目设置。你会看到Web API Key。把它复制到你项目目录中的google-services.json文件中。这是该文件的一个片段:

... 
    ], 
    "api_key": [ 
    { 
     "current_key": "<COPY Web Api Key HERE>" 
    } 
    ], 
    ... 

就是这样。使用Firebase中的密钥替换“current_key”的值后,它恢复工作(之前它有一些其他密钥,我认为我在Google Console上生成了它,并且它运行了几个月,就在几天前它停止工作)

相关问题