微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

NoClassDefFoundError->如何使此kotlin代码起作用以实现MQTT连接?

如何解决NoClassDefFoundError->如何使此kotlin代码起作用以实现MQTT连接?

我在this网站上找到了这段代码,它实现了Android的MQTT客户端,并且是用Kotlin编写的。

我几乎没有使用这种语言的经验,所以我不知道如何使它起作用。我将其复制到MainActivity.kt文件中,然后从onCreate函数调用connect(this):

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setSupportActionBar(findViewById(R.id.toolbar))
        connect(this)
        ...

这是连接功能

    private fun connect(context: Context){


        var serverURI = "tcp://broker.hivemq.com:1883"
        mqttClient = MqttAndroidClient(context,serverURI,"SmartFarmerApp")
        mqttClient.setCallback(object: MqttCallback{
            override fun messageArrived(topic: String?,message: MqttMessage?) {
                Log.d(TAG,"Receive message: ${message.toString()} from topic: $topic")
            }

            override fun connectionLost(cause: Throwable?) {
                Log.d(TAG,"Connection lost ${cause.toString()}")
            }

            override fun deliveryComplete(token: IMqttDeliveryToken?) {
                Todo("Not yet implemented")
            }
        })

        val options = MqttConnectOptions()
        try {
            mqttClient.connect(options,null,object: IMqttActionListener {
                override fun onSuccess(asyncActionToken: IMqttToken?) {
                    Log.d(TAG,"Connection success")
                }

                override fun onFailure(asyncActionToken: IMqttToken?,exception: Throwable?) {
                    Log.d(TAG,"Connection failure")
                }
            })
        }catch( e: MqttException){
            e.printstacktrace()
        }
    }

try块中的第一行给我一个错误java.lang.NoClassDefFoundError:无法解决以下问题:Landroidx / localbroadcastmanager / content / LocalbroadcastManager;

我该怎么办?

解决方法

Activity中运行时,可以提供this作为Context(因为ActivityContext类)。在其他地方运行时,您需要查看从何处获取Context,例如this.getContext()中的Fragment(假设Fragment附加到Activity上)。在这种情况下,即使(非主题)ApplicationContext也足够。

,

我解决了这一问题,在build.gradle(模块)中添加了一行。我添加了这个:

implementation 'com.android.support:support-v4:30.x.x'

数字30是我在同一文件中找到的compileSdkVersion

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。