当前位置: 首页 > 知识库问答 >
问题:

Kotlin函数返回null[重复]

田兴怀
2023-03-14

这个函数总是返回null. t是不被分配与令牌值.有人能帮助请?

fun getToken(): String? {
    var t: String? = ""
    FirebaseMessaging.getInstance().token.addOnSuccessListener { token: String? ->
        Log.i(TAG,"Token: ${token.toString()}")
        t = token
    }.addOnFailureListener { e: Exception? ->
        Log.e(TAG,"Couldn't get token", e)
    }
    return t
  }

共有1个答案

卫博雅
2023-03-14

getToken返回null,因为此函数在调用成功侦听器之前完成getToken不会等待请求完成。它所做的唯一一件事是设置成功和失败侦听器,当请求返回响应时将调用这些侦听器。

有几种方法可以解决这个问题:

  • Mark getToken as suspend and use FirebaseMessaging.getInstance().token.await() to wait until the response is received.
  • Instead of returning the token, you can pass a callback to getToken which will be invoked when the response comes.
    fun getToken(onTokenReceive: (String?) -> Unit) {
        FirebaseMessaging.getInstance().token.addOnSuccessListener { token: String? ->
            Log.i(TAG,"Token: ${token.toString()}")
            onTokenReceive(token)
        }.addOnFailureListener { e: Exception? ->
            Log.e(TAG,"Couldn't get token", e)
            onTokenReceive(null)
        }
    }
    
    val token = getToken()
    // using the `token` here
    
    getToken { token ->
        // use the `token` here
    }
    

 类似资料:
  • 问题内容: 我有这个代码。对象构造函数是否有可能以某种方式失败,从而为它分配了一个值,并在构造函数返回后释放了该对象? 问题答案: 假设您使用的是PHP 5,则可以在构造函数中引发异常: 为了清楚起见,您可以将其包装在静态工厂方法中: 顺便说一句,某些版本的PHP 4允许您在构造函数中将$ this设置为NULL,但我认为这从未得到正式批准,并且最终删除了“功能”。

  • 我试图将三列作为一个字符串,但由于某些原因,我只得到NULL。 以下是代码: places表包含name、city和country三列,它不是空的,但在某些列中可以包含NULL。 结果是: 我试着从这篇帖子中得到答案,如果任何字段包含NULL,MySQL CONCAT将返回NULL,但它对我不起作用。

  • 有人能帮我处理下面的代码吗?我想要一个使用函数的等价物。 只是一个音符我试过这个,但它不工作 不起作用的是-当值存在并且返回可选值时。empty()我希望原始函数返回null。它现在正在返回“随机”。 我的假设是,由于方法返回,它被替换。 请注意,原始代码是由其他人编写的。由于它有很多依赖关系,我无法更改输入/输出参数。:(

  • 我正在尝试从json文件读取到读取器,以便将其解析为java对象:` ' 我在运行时收到一个NullPointerException。

  • 我在ViewDidLoad函数中有一些代码,它将在调用堆栈的末尾设置一个类变量。我试图重构代码,使其成为一个单独的函数,它将返回值,而不是设置类变量。 由于我缺乏swift知识,我不确定哪里出了问题,我的函数似乎返回得太厄尔了,因为我可以在调试器中告诉我,它在被设置为之前跳转到return。 我还可以在调试器中看到,内部函数在返回主函数后调用。 如何等待内部调用完成后再返回?或者什么是正确的快速方