java - 订阅多个 MQTT 主题

标签 java android mqtt paho subscribe

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

相关文章:

php - SQL 数据库和 MQTT(Mosquitto 或 RSMB)

java - 为什么红黑树中这两个节点不是黑色的?

asp.net - 使用 ASP.Net 向 MQTT 服务器发送消息

java - 当通过sql过程发生表更新时更新spring缓存

java - 用 retrofit2 发送这个 formjson

java - 检查通用类型

使用首选项管理器时出现 java.lang.NullPointerException

python - 如何在Python Azure IoT Hub客户端SDK中为mqtt发布消息设置QoS级别0?

java - 想要将Jetty设置为热部署,但是没有部署器

java - 防止重新加载 WebView onResume()