我知道这已被问过很多,但我仍然可以让它发挥作用。这是我的代码:
private int test;
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
DatabaseReference userRef = rootRef.child("Users");
test = 0;
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(userID))
test = 1;
else
test = 2;
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
Log.d(TAG, "Test = " + test);
这是Firebase上的内容:
我不知道为什么,但变量" test"始终返回值0,这意味着addListenerForSingleValueEvent不起作用。感谢您提供先进的帮助
答案 0 :(得分:7)
数据是从Firebase异步加载的。当您的日志test
时,onDataChange
尚未运行。
要查看此操作,请在 onDataChange
内添加更多记录:
private int test;
test = 0;
userRef.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild(userID)) {
test = 1;
}
else {
test = 2;
}
Log.d(TAG, "Test2 = " + test);
}
@Override
public void onCancelled(DatabaseError databaseError) {
throw databaseError.toException(); // Don't ignore errors
}
});
Log.d(TAG, "Test = " + test);
现在你首先看到:
测试= 0
然后一旦数据加载并调用onDataChange
:
测试= 1
或
测试= 2
因此,您应始终在onDataChange()
内放置(或调用)需要数据库数据的代码。
答案 1 :(得分:0)
上帝,我在这里呆了几分钟。我原来是在下载 google-services.json 后在 firebase 控制台中创建了数据库。
您必须从项目配置中再次下载 google-services.json,这一次将正确引用数据库
然后清理项目,卸载并安装应用程序以确保新的配置文件已交付。
“项目信息”:{ "project_number": "596410010449", "firebase_url": "https://yourname.europe-west1.firebasedatabase.app",