【问题标题】:Firebase Realtime Database from Android setValue not workingAndroid setValue 中的 Firebase 实时数据库无法正常工作
【发布时间】:2021-03-23 15:43:24
【问题描述】:

我第一次尝试使用实时数据库。设定值功能对我不起作用。

我已经通过以下方式更新了写作规则:

{
  "rules": {
    ".read": true,
    ".write": true
  }
}

我的代码如下所示:

        Integer Age = 24;
        FirebaseDatabase mDatabase = FirebaseDatabase.getInstance();
        DatabaseReference sReference = mDatabase.getReference();
        sReference.child("Users").child("George").child("Age").setValue(Age)
                .addOnSuccessListener(new OnSuccessListener<Void>() {
                    @Override
                    public void onSuccess(Void aVoid) {
                        Toast.makeText(Dashboard.this, "Data stored", Toast.LENGTH_LONG).show();
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(Dashboard.this, "Error", Toast.LENGTH_LONG).show();
                    }
                });

当我打印出参考时,它是正确的。但是 OnSucces 和 OnFailure 都没有被触发。

感谢您的帮助。

【问题讨论】:

  • 会不会是事件附加到它的时间晚于执行的操作,集合是否发生得更早?可以按照教程推荐的方式来做吗? firebase.google.com/docs/database/web/read-and-write
  • 如果 OnSucces 和 OnFailure 都没有被触发,那么很可能您的设备上没有互联网连接。
  • @AlexMamo 我认为互联网连接不是问题,因为身份验证工作正常,我也在模拟器上尝试过
  • @AntonKrug 这是第一次出现这个场景,也尝试了各种模板编写代码
  • 您能否enable debug logging 并检查您的应用程序在setValue 调用发生时的logcat 输出是否有任何相关消息?

标签: android firebase-realtime-database


【解决方案1】:

请确保在获取数据库实例时指定数据库 URL -

val database = Firebase.database("<url_here>")
val ref = database.reference

然后对其执行 setValue() 函数说 -

ref.child("users").child(uid).setValue(user)

这在我的情况下有效!

【讨论】:

    【解决方案2】:
    1. Ensure your sha1 is added to firebase
    2. Enable signIn method in Firebase
    3. Enable Android Device Verification in Google Cloud
    4. 确保 AndroidManifest.xml 中的 Internet 权限
    5. 在 getInstance() 中提供 db url。 How to find Database URL
      DatabaseReference ref = FirebaseDatabase.getInstance("<<Insert Databse URL here>>").getReference();
      
    6. 重新启动模拟器和调制解调器/路由器
    7. 使用日志进行调试

    【讨论】:

      【解决方案3】:

      这可能是一个 firebase 实时数据库错误。当您选择欧洲服务器(测试版)而不是美国时,就会发生这种情况。并且不会出现任何错误或警告。

      如上所述修复。在您的数据库实例中使用来自 firebase 控制台的直接链接(使用来自 firebase 控制台实时数据库部分的项目数据更改 xxx):

      // Write a message to the database
      val database = Firebase.database("https://xxxxxxxx-xxxxxxx-default-rtdb.europe-west1.firebasedatabase.app/")
      val myRef = database.getReference("message")
      
      myRef.setValue("Hello, World!")
      

      【讨论】:

      • 这...我不敢相信我已经浪费了一整天不明白为什么我的数据库根本无法工作...没有日志,什么都没有。谢谢您,先生,您可能为我节省了更多浪费的时间。谷歌在设置其他数据库位置时绝对没有给出任何警告,多么不专业,他们认为我们可以以某种方式想象出这些问题的原因。
      【解决方案4】:

      发现问题。该数据库位于欧洲。显然我没有在 getInstance() 方法中指定 URL,这在这种情况下似乎是必需的。

      【讨论】:

      • 太好了,您在弄清楚后发布了答案,因此如果有人遇到类似问题,他们将找不到没有答案的“已解决”问题。
      • 谢谢@Alex。我花了 8 个小时都想不通。
      • 非常适合我,数据库位置:新加坡 (asia-southeast1)
      猜你喜欢
      • 2021-07-13
      • 1970-01-01
      • 2018-03-26
      • 2022-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多