我遇到了一个问题,或者可能是因为我的编程背景太少,这个问题是关于订阅多个主题并在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/