[英]Paho-mqtt callbacks in different classes android java
我剛剛開始使用Java Android編程,甚至是Java編程,我想使用某個MqttHandler類實現Paho MQTT Android服務,我想將回調設置為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();
}
初始化MqttHandler的Activity中的函數:
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,但它是否安全?
設置回調處理程序的正確方法是在MQTT客戶端中設置它,如下所示:
public class MTTConnector {
public void connect {
MqttAndroidClient mqttClient = new MqttAndroidClient(BaseApplication.getAppContext(), broker, MQTT_CLIENT_ID);
mqttClient.setCallback(new MqttCallbackHandler(BaseApplication.getAppContext()));
}
}
public class MqttCallbackHandler implements MqttCallbackExtended {
@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) {
}
}
如果您使用的是最新版本,則回調需要實現MqttCallbackExtended類,有關在線GitHub項目的更多詳細信息,請參閱以下鏈接。
在您的活動內部初始化MTTConnector並調用connect。
希望這個幫助。
干杯!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.