私はJavaのAndroidプログラミングやJavaプログラミングを開始しましたが、特定のMqttHandlerクラスを使用してPaho MQTT Androidサービスを実装したいと思っていました。 MqttHandlerクラスのパラメータ。コールバックに関する他の答えは、一般的にインターフェイスクラスを使用して提案されていますが、私はそれがどのように動作するのかわかりません。これは、私が試したものです:異なるクラスのPaho-mqttコールバックJava
public interface InterfaceMqttCallback extends MqttCallbackExtended{
@Override
public void connectComplete(boolean b, String s);
@Override
public void connectionLost(Throwable throwable);
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception ;
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken);
}
MqttHandlerクラスのコンストラクタ:
public MqttHandler(Context context, InterfaceMqttCallback mqttCallbackExtended){
mqttAndroidClient = new MqttAndroidClient(context, serverUri, clientId);
mqttAndroidClient.setCallback(mqttCallbackExtended);
connect();
}
MqttHandlerを初期化活動における機能:
private void startMqtt(){
mqttHandler = new MqttHandler(getApplicationContext(), new InterfaceMqttCallback() {
@Override
public void connectComplete(boolean b, String s) {
Log.w("Anjing", s);
}
@Override
public void connectionLost(Throwable throwable) {
}
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
Log.w("Anjing", mqttMessage.toString());
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
});
}
をしかし、私はそれをテストしてきたように私は、どのメッセージも受信されていないため、コールバックが設定されていないと思います。そこで、MqttHandlerでコールバックを直接設定しようとしましたが、メッセージは受信されます。
public MqttHandler(Context context, InterfaceMqttCallback mqttCallbackExtended){
mqttAndroidClient = new MqttAndroidClient(context, serverUri, clientId);
mqttAndroidClient.setCallback(new InterfaceMqttCallback() {
@Override
public void connectComplete(boolean b, String s) {
Log.w("mqtt", s);
}
@Override
public void connectionLost(Throwable throwable) {
}
@Override
public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception {
Log.w("Anjing", mqttMessage.toString());
}
@Override
public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
}
});
connect();
}
だから何が問題なのですか?ありがとうございます。
編集:もちろん、私はMqttHandlerクラスの変数mqttAndroidClient
をpublicとして設定できますが、安全ですか?
はい、私はMqttCallBackExtendedクラスを拡張していますが、達成したいのは、アクティビティクラスと、アクティビティクラスでコールバックを設定できるMqttクライアントクラスを分離することです。これは、コールバックを除いて、すべてのMqttビジネスを1つのクラスに入れることができるようにするためです。アクティビティクラスのハンドラクラスを呼び出したいからです。私はMqttの束でActivityクラスを混乱させたくありません。 –
はい、あなたはいらない、更新されたコードを見てください。アクティビティの中でMTTConnectorを初期化し、connectを呼び出します。 –