You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

类型不匹配错误求助:推断类型为View!但期望为String

问题分析与解决

错误提示「Type mismatch: inferred type is View! but String was expected」的原因很明确:你把点击事件的View参数命名成了otp,然后直接把这个View对象传给了需要String类型验证码的PhoneAuthProvider.getCredential方法,导致类型不匹配。

错误代码问题点

在setOnClickListener { otp -> }里,lambda的参数otp其实是被点击的View本身(也就是你的otpView),不是输入的验证码字符串。

修复后的代码示例

binding!!.otpView.setOnClickListener { 
    // 获取OTP输入框中的验证码字符串,根据你的OTPView实现调整获取方式
    val otpCode = binding.otpView.text.toString()
    // 如果是自定义OTPView,有些库会直接提供获取验证码的方法,比如:
    // val otpCode = binding.otpView.otp

    val credential = PhoneAuthProvider.getCredential(verificationId!!, otpCode)
    auth!!.signInWithCredential(credential).addOnCompleteListener { task ->
        if (task.isSuccessful) {
            val intent = Intent(this@OTPActivity, SetupProfileActivity::class.java)
            startActivity(intent)
            finishAffinity()
        } else {
            Toast.makeText(this@OTPActivity, "Failed", Toast.LENGTH_SHORT).show()
        }
    }
}

关键说明

  • 点击事件的lambda参数不需要命名成otp,直接忽略或者命名为view更清晰。
  • 必须从otpView中提取输入的字符串验证码,再传给getCredential方法。不同的OTPView库获取验证码的方式可能不同,比如有的是text属性,有的是专门的getOtp()方法,根据你使用的库调整即可。

内容的提问来源于stack exchange,提问作者tamir yosef

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 16:06:27