繁体   English   中英

如何在Android上的Paho中发布保留true的mqtt消息

[英]how to publish mqtt message with retained true in paho on android

我在Android App上使用Paho Java客户端库。 下面提供的代码。

MqttAndroidClient client_Panic = new MqttAndroidClient(this.getApplicationContext(), serverURL, CLIENT_ID);
    try {
        MqttConnectOptions options = new MqttConnectOptions();
        options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1);
        options.setCleanSession(false);
        options.setKeepAliveInterval(90);
        options.setConnectionTimeout(100);
        IMqttToken token = client_Panic.connect(options);

            //Few callbacks

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

并在需要时发布消息

    String msg = "messages";
    MqttMessage message = new MqttMessage();
    message.setPayload(msg.getBytes());
    try {
        client_Panic.publish(topic, message);
    } catch (MqttException e) {
        e.printStackTrace();
    }

工作正常,但不完整。 我需要的是,每当其他客户端订阅同一主题时,都应该获取最后一个保留的消息,该消息可能早于发布者发布。

为此,我搜索了他们的文档,

protected void setWill(String topic,
                   MqttMessage msg,
                   int qos,
                   boolean retained)

因此,setWill根据文档具有启用保留选项的选项。 所以我尝试了

        options.setConnectionTimeout(100);
        options.setWill(topic,null,2,true); // This place I added
        IMqttToken token = client_Panic.connect(options);

但是java.lang.IllegalArgumentException at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateWill包含options.setWill的行上, java.lang.IllegalArgumentException at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateWill出现错误java.lang.IllegalArgumentException at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateWill

setWill是在android上启用retained true的正确方法吗,如果是,那么需要提供哪些参数,否则它们是在android上启用它的任何其他方法吗? TIA。

遗嘱是非常具体的消息,仅当客户端与代理之间的连接不干净(例如,网络中断)时才发布。

您不能将null消息设置为Will错误,这就是错误所在。

保留状态特定于给定消息,因此您无需全局设置它,而是在每条消息上都设置它。 只需调用setRetained(boolean)将消息标记为保留

String msg = "messages";
MqttMessage message = new MqttMessage();
message.setRetained(true);
message.setPayload(msg.getBytes());
try {
    client_Panic.publish(topic, message);
} catch (MqttException e) {
    e.printStackTrace();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM