如何在android

时间:2016-06-01 11:43:32

标签: java android mqtt paho

我在Android应用程序上使用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

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

1 个答案:

答案 0 :(得分:5)

Will是一条非常具体的消息,仅在客户端与代理断开连接时才会发布(例如网络丢弃)。

您无法将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();
}