【问题标题】:Android Firebase addListenerForSingleValueEvent is not workingAndroid Firebase addListenerForSingleValueEvent 不起作用
【发布时间】:2017-09-24 06:43:53
【问题描述】:

我知道这已经被问了很多,但我仍然可以让它工作。这是我的代码:

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 上的内容:

  • 应用程序名-e545e
    • 用户
      • 用户ID

我不知道为什么,但变量“test”总是返回值 0,这意味着 addListenerForSingleValueEvent 不起作用。感谢您在高级方面的帮助

【问题讨论】:

  • 您使用 addListenerForSingleValueEvent 是否有原因?在监视子节点时,您不应该更愿意使用 addChildEventListener 吗?
  • 我没有考虑过使用它,因为 Stack Overflow 上的很多线程都使用了 addListenerForSingleValueEvent。我会尝试看看它是否有效
  • 嗨@leScepter,我遇到了关于 addValueEventListener() 回调的问题,在我的情况下,onDataChange() 根本没有触发,没有收到任何来自 firebase 的警告错误。
  • 在这里帮助我 stackoverflow.com/questions/53396190/… 面临与 firebase 数据库连接相同的问题。

标签: android firebase firebase-realtime-database


【解决方案1】:

数据是从 Firebase 异步加载的。到您的日志test 时,onDataChange 还没有运行。

要查看实际情况,请添加更多日志内部 onDataChange:

私人内部测试;

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() 中放入(或调用)需要数据库中数据的代码。

【讨论】:

  • 确实我喜欢你的长答案
  • 我在这里遗漏了什么吗?此代码无法编译,您无法在匿名内部类中引用非最终局部变量。
【解决方案2】:

天哪,我在这里呆了几分钟。原来我在下载 google-services.json 后在 firebase 控制台中创建了数据库。

您必须从项目配置中再次下载 google-services.json,这一次将拥有对数据库的正确引用

然后清理项目,卸载并安装应用程序以确保新的配置文件已交付。

“项目信息”:{ "project_number": "596410010449", "firebase_url": "https://yourname.europe-west1.firebasedatabase.app",

【讨论】:

  • 这是我的情况,tnx
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
相关资源
最近更新 更多