Я только что начал программировать Java для Android или даже программировать на Java в целом, и я хотел реализовать Android-сервис Paho MQTT, используя определенный класс MqttHandler, и я хочу установить обратный вызов в качестве параметра для класса MqttHandler. Другие ответы относительно обратных вызовов в целом предлагали использовать класс интерфейса, но я не знаю, как это работает. Это то, что я пробовал:
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();
}
функция в Activity, которая инициализирует 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();
}
Так в чем проблема? Заранее спасибо..
РЕДАКТИРОВАТЬ: Конечно, я могу установить переменную mqttAndroidClient
в классе MqttHandler как общедоступную, но безопасно ли это?