订阅多个MQTT主题

我正在努力解决问题,或者可能是因为我的编程背景很小,所以问题在于订阅多个主题并在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时,其结果与第一个相同


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


慕沐林林
浏览 438回答 2
2回答

千巷猫影

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

汪汪一只猫

我刚刚想通了if (topic.contains("button") ) {            temp.setText(new String(message.getPayload()));        }        else if (topic.contains("test"))        {            volt.setText(new String(message.getPayload()));        }我刚刚输入了要显示的每个主题的名称。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java