gpt4 book ai didi

java - 订阅多个 MQTT 主题

转载 作者:行者123 更新时间:2023-12-02 11:00:58 25 4
gpt4 key购买 nike

我遇到了一个问题,或者可能是因为我的编程背景太少,这个问题是关于订阅多个主题并在android中的多个 TextView 中显示订阅的主题

我以前是这样订阅的:

private void setSub()
{
try{

client.subscribe(topic,0);

}
catch (MqttException e){
e.printStackTrace();
}
}

然后我在成功连接到MQTT客户端后调用了setsub()函数

然后我实现了 setCallBack 方法,并在 messageArrived 下添加了行,以使用从订阅收到的消息有效负载更改 textview 值

@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
temp.setText(new String(message.getPayload()));
}

当然,当我定义另一个 TextView 时,它的结果与第一个 TextView 相同

所以我的问题是如何配置 MessageArrived 函数以在单个 TextView 中显示每个主题?

提前谢谢您。

最佳答案

您可以根据不同主题的需要多次调用client.subscribe()

private void setSub()
{
try{

client.subscribe(topic1,0);
client.subscribe(topic2,0);
client.subscribe(topic3,0);

}
catch (MqttException e){
e.printStackTrace();
}
}

messageArrived() 回调会传递每条消息的 topic,因此您只需设置一个 if 语句来根据主题决定要更新哪个 textView。

@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
if (topic.equals(topic1) {
temp.setText(new String(message.getPayload()));
} else if (topic.equals(topic2) {
foo.setText(new String(message.getPayload()));
}
}

但是您不应该在回调中调用 setText() 方法,因为它发生在客户端线程上。您需要考虑使用 runOnUiThread() 进行更新。

关于java - 订阅多个 MQTT 主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51329181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com