android - 使用活动方法后Android应用程序与RabbitMQ断开连接
问题描述
我正在尝试将 RabbitMQ 实现到我的 android 应用程序中,但是handleDelivery
当我尝试调用外部函数时,方法内部存在连接丢失的问题。
private fun initRabbitmq () {
factory.setUri("someURI")
subscribeThread = Thread(object : Runnable {
override fun run() {
val connection: Connection = factory.newConnection()
val channel: Channel = connection.createChannel()
val consumer: DefaultConsumer
consumer = object : DefaultConsumer(channel) {
override fun handleDelivery(consumerTag: String?, envelope: Envelope?, properties: AMQP.BasicProperties?, body: ByteArray?) {
super.handleDelivery(consumerTag, envelope, properties, body)
val msg = String(body!!, Charsets.UTF_8)
Log.e(TAG, "RabbitMQ - $msg")
showRabbitMessage(msg)
}
}
channel.basicConsume("defenders_test", true, consumer)
}
})
subscribeThread.start()
}
当showRabbitMessage()
正在执行的功能连接丢失,但如果我将其删除并查看日志,则消息将显示在控制台中。
知道如何从线程中获取消息吗?提前谢谢!
解决方案
问题是我必须从线程中传输对象-> 输出,而在 android 中可以通过使用Handle
对象和handleMessage()
方法来完成。
推荐阅读
- bash - bash 脚本中“无手动输入”的错误处理
- javascript - $(window).one('scroll' 从页面中间刷新时触发
- reactjs - 当存在重复用户时,为什么我收到错误 400 响应而不是我的预期响应?
- python - 如何使用 beautifulsoup 从页面中抓取数据
- node.js - Uncaught (inpromise)IntegrationError: Invalidvalue for stripe.confirmCardPayment intent secret: value 应该是 client_secret string.u 指定:true
- node.js - 无法链接可执行的“节点”-在 termux 中运行 npm 错误
- r - 哪个是适用于 Windows XP SP3 32 位的最新版本的 R?
- r - 如何将绘图限制在特定范围内
- java - Java 方法没有实现它应该实现的功能
- reactjs - 如何在渲染或更改组件时保持歌曲播放,以及使用 React js 更新底部导航栏中的播放/暂停状态