2016-06-01 15 views
1

私のアンドロイドアプリでPaho Javaクライアントライブラリを使用しています。コードは以下のとおりです。アンドロイドのpahoでmqttメッセージを公開する方法

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(); 
    } 

必要。私が必要とするのは、同じトピックを購読している他のクライアントが最後に保持したメッセージを取得する必要があるときです。私は彼らのドキュメントで検索そのために

、私は保持オプションを有効にするオプションを持っているので、setWillドキュメントごとに

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

を得ました。だから私は

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

と試みたが、options.setWillを含む行にエラーjava.lang.IllegalArgumentException at org.eclipse.paho.client.mqttv3.MqttConnectOptions.validateWillを得ました。

setWillは、アンドロイドでretained trueを有効にする正しい方法です。そうであれば、どのパラメータを提供する必要がありますか?それ以外の方法はアンドロイドで有効にする方法ですか? TIA。

答えて

3

ウィルは、クライアントがブローカから不正に切断された場合(ネットワーク廃棄など)にのみ公開される非常に特殊なメッセージです。

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(); 
} 
+0

ありがとうございます! –

+0

@ hardillb hold onとすると、長さ0のメッセージを意味すると仮定して、メッセージをヌルメッセージとして設定できるはずです。 – ralight

+0

@ralight、これは長さゼロのバイト配列を持つMessageオブジェクトですが、これはnullのMessageオブジェクトです。 – hardillb

関連する問題