【问题标题】:Android Kotlin java.lang.ClassCastExceptionAndroid Kotlin java.lang.ClassCastException
【发布时间】:2021-06-22 17:36:29
【问题描述】:

当我运行代码时,我会出现这个异常

这是有问题的部分。

每 60 秒,它执行广播TEK 功能,将字符串 generatedtek 发送到其他活动 (AppCompatActivity()),即 BLEAdvertiser。

在 BLEAdvertiser 上生成字符串的代码如下:

所以它应该在 Logcat 上打印接收到的字符串,但应用程序抛出异常。 为什么? 我用谷歌搜索过这个异常,有人说这是因为我发送的变量类型与我获取变量时的类型不匹配。但是在我的代码上,它们都是字符串......可能是什么问题?

【问题讨论】:

    标签: android kotlin exception


    【解决方案1】:

    试试下面的代码,它会对你有所帮助。

    class TestActivity : AppCompatActivity(), BTFragment.BLEAdvertiser {
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_test)
    
        //Make sure your BTFragment calling from this activity
    }
    
    override fun receiveData(encryptedtk: String) {
        toast(encryptedtk)
     }
    
    }
    
    
    class BTFragment : Fragment() {
    private lateinit var  bleAdvertiser: BLEAdvertiser
    override fun onAttach(context: Context) {
        super.onAttach(context)
        if (context is BLEAdvertiser) this.bleAdvertiser = context
    }
    
    
    fun broadcastTEk(text: String) {
     this.bleAdvertiser.receiveData(text)
    }
    
    
    interface BLEAdvertiser {
        fun receiveData(encryptedtk: String)
    }
    }
    

    【讨论】:

    • 这是否意味着我必须创建一个名为 Test 活动的新 kotlin 类?
    • 不,你需要你的MainActivity 来实现BLEAdvertiser。目前情况并非如此,这就是演员失败的原因(当你这样做时activity as BLEAdvertiser
    • 但是在这种情况下,encrytpedtek不是传递给MainActivity吗?我想在 BLEAdvertiser 上使用该变量。如果我在 MainActivity 上有 receiveData,如何在 BLEAdvertiser 中使用传递的 encrytpedtek?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多