【问题标题】:Type mismatch: inferred type is String? but String was expected类型不匹配:推断类型是字符串?但字符串是预期的
【发布时间】:2019-03-26 01:57:00
【问题描述】:

由于我的代码中有这一行:

var myRef = child_myRef.child(FirebaseAuth.getInstance().uid) 

【问题讨论】:

  • 您使用的是 Java 10 吗?如果是这样,请将该标签添加到您的问题中。
  • @Tim 看起来像 Kotlin
  • child_myRef.child 需要一个字符串,但 FirebaseAuth.getInstance().uid 可能为空......这就是消息的意思
  • 不,它的 Java 8 @TimBiegeleisen
  • @EmmanuelJohnHilonga 你在 FirebaseAuth.getInstance.uid 这一行中尝试什么?

标签: android firebase-realtime-database kotlin


【解决方案1】:

原因是因为你的FirebaseAuth.getInstance().uidString?(可以为Null),而.child()的输入需要String(无Null),所以在此之前请检查null:

FirebaseAuth.getInstance().uid?.let{
  var myRef = child_myRef.child(it) 
  .....
}

或者如果你确定FirebaseAuth.getInstance().uid永远不会为空,你可以使用FirebaseAuth.getInstance().uid!!,但这不是一个好方法

【讨论】:

    【解决方案2】:

    您可以将其替换为child_myRef.child(FirebaseAuth.getInstance().uid!!) 或检查null

    【讨论】:

    • 他正在尝试根据用户 ID 创建子引用
    • 这个完美。现在,经过身份验证的用户可以使用他们各自的 ID 将数据发布到实时数据库中。这一行 child_myRef.child(FirebaseAuth.getInstance().uid!!) 完全解决了我的问题。谢谢@Bek
    • FirebaseAuth.getInstance().uid!! 可能会返回 NullPointerException 使用 GianhTran 的答案以避免异常。
    【解决方案3】:
    var myRef = child_myRef.child(FirebaseAuth.getInstance().getCurrentUser().getUid())
    myRef.child("jina").setValue(Fname.text.toString())
    myRef.child("tarehe").setValue(bDate.text.toString())
    myRef.child("place").setValue(place.text.toString())
    


    希望您尝试将所有详细信息放在用户 ID 下。
    因此,如果是这种情况,请更改您对 myRef 的引用。
    因此,您可以将上述所有详细信息放在您的用户 ID 下。

    【讨论】:

      【解决方案4】:

      因为FirebaseAuth.getInstance().uid的值可以是null,所以先检查它是否不为null,然后执行你的操作。

      if(FirebaseAuth.getInstance().uid!=null){
      var myRef = child_myRef.child(FirebaseAuth.getInstance().uid)
      myRef.child("jina").setValue(Fname.text.toString())
      myRef.child("tarehe").setValue(bDate.text.toString())
      myRef.child("place").setValue(place.text.toString())
      
      }
      

      如果您与FirebaseAuth.getInstance().uid!! 核对,这将导致 Null Pointer Exception 并且您的应用程序将崩溃,如果 FirebaseAuth.getInstance().uid 的值是 null,所以试试 上述方法(如我写的示例)

      【讨论】:

        【解决方案5】:
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-14
        • 2021-09-29
        • 1970-01-01
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多