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



我在这个网站上找到了这段代码,它实现了一个适用于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,例如Fragment中的this.getContext()(假设Fragment连接到Activity(。在这种情况下,即使是(非主题的(ApplicationContext也应该足够了。

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

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

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

相关内容

  • 没有找到相关文章

最新更新