当我的应用程序启动时,我会在Firebase数据库中查看当前用户的详细信息(我正在存储它的uid)。
我将addListenerForSingleValueEvent附加到用户的ref以读取它的数据。
我的问题是,有时,它不会返回任何价值,既不成功也不失败。
仅清除应用程序的数据才能解决问题,但当然会强制用户再次登录。
我在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 :(得分:5)
我看到的建议是在keepSynced(true)
对象上调用Query
。
答案 1 :(得分:1)
请尝试这样。 如果您不能通过此方法求解,请发送“共享我”这一部分的源代码。 ...
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("users").child(uid).addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
if (dataSnapshot.exists()){
final HashMap<String, Object> dataMap = (HashMap<String, Object>) dataSnapshot.getValue();
for (String key : dataMap.keySet()){
Object data = dataMap.get(key);
try{
HashMap<String, Object> moneyData = (HashMap<String, Object>) data;
Money money = new Money(("", "");
}catch (ClassCastException cce){
try{
name = String.valueOf(dataMap.get("username"));
email = String.valueOf(dataMap.get("useremail"));
}catch (ClassCastException cce2){
}
}
}
// do something
}else {
// when empty data
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
答案 2 :(得分: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();
}
});
答案 3 :(得分:-1)
我几天都遇到了同样的问题,我终于修好了。
看起来我的Api键已经改变了!这就是阻止addListenerForSingleValueEvent()
返回的原因!
转到Firebase Console,打开项目,点击设置图标,然后转到项目设置。在那里,您会看到Web API Key
。将其复制并复制到项目目录中的google-services.json
文件中。这是该文件的摘录:
...
],
"api_key": [
{
"current_key": "<COPY Web Api Key HERE>"
}
],
...
那就是它。替换&#34; current_key&#34;的值后使用来自Firebase的密钥,它恢复了工作(以前它有一些其他密钥,我认为我在Google Console生成了它并且它工作了几个月。就在几天前它停止了工作)