为了账号安全,请及时绑定邮箱和手机立即绑定

订阅多个MQTT主题

订阅多个MQTT主题

慕沐林林 2021-05-11 17:16:28
我正在努力解决问题,或者可能是因为我的编程背景很小,所以问题在于订阅多个主题并在android的多个textview中显示已订阅的主题我曾经这样订阅它:private void setSub(){    try{        client.subscribe(topic,0);    }    catch (MqttException e){        e.printStackTrace();    }}在成功连接到MQTT客户端之后,我调用了setsub()函数然后我实现了setCallBack方法,并在messageArrived下添加了以下行,以使用从订阅中收到的消息有效负载来更改textview值@Overridepublic void messageArrived(String topic, MqttMessage message) throws Exception {    temp.setText(new String(message.getPayload()));}当然,当我定义另一个textview时,其结果与第一个相同所以我的问题是如何配置MessageArrived函数以在单个textview中显示每个主题?
查看完整描述

2 回答

?
千巷猫影

TA贡献1829条经验 获得超7个赞

您可以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()用于执行更新的方法。


查看完整回答
反对 回复 2021-05-26
?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

我刚刚想通了


if (topic.contains("button") ) {

            temp.setText(new String(message.getPayload()));

        }

        else if (topic.contains("test"))

        {

            volt.setText(new String(message.getPayload()));

        }

我刚刚输入了要显示的每个主题的名称。


查看完整回答
反对 回复 2021-05-26
  • 2 回答
  • 0 关注
  • 437 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信