2016-09-24 6 views
1

Я просто начал использовать MQTT Paho library в своем приложении. Как сделать асинхронную подписку на эту тему? (подписка в новом потоке) А затем в режиме реального времени для получения данных и отображения.Android MQTT async subscribe

Это мой код в MainActivity, в основном потоке:

public void mqttConnect() { 
    final TextView textView = (TextView) findViewById(R.id.sub_Text_View); 
    String clientId = MqttClient.generateClientId(); 
    final MqttAndroidClient client = new MqttAndroidClient(this.getApplicationContext(), server, clientId); 
    client.setCallback(new MqttCallbackExtended() { 
     @Override 
     public void connectComplete(boolean reconnect, String serverURI) { 

     } 

     @Override 
     public void connectionLost(Throwable cause) { 

     } 

     @Override 
     public void messageArrived(String topic, MqttMessage message) throws Exception { 
      Log.d("NANADEV", message.toString()); 
      textView.setText(message.toString()); 

     } 

     @Override 
     public void deliveryComplete(IMqttDeliveryToken token) { 

     } 
    }); 

    MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); 
    mqttConnectOptions.setAutomaticReconnect(true); 
    mqttConnectOptions.setCleanSession(false); 

    try { 
     client.connect(mqttConnectOptions, null, new IMqttActionListener() { 
      @Override 
      public void onSuccess(IMqttToken asyncActionToken) { 

       final String topic = "testwork/value"; 
       int qos =0; 
       try { 
        IMqttToken subToken = client.subscribe(topic, qos); 
        subToken.setActionCallback(new IMqttActionListener() { 
         @Override 
         public void onSuccess(IMqttToken asyncActionToken) { 



         } 

         @Override 
         public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 

         } 
        }); 
       } catch (MqttException e) { 
        e.printStackTrace(); 
       } 

      } 

      @Override 
      public void onFailure(IMqttToken asyncActionToken, Throwable exception) { 

      } 
     }); 
    } catch (MqttException e) { 
     e.printStackTrace(); 
    } 

Спасибо!

+0

Вы не сказали нам, почему это не работает. Измените вопрос и объясните возникшие у вас проблемы при попытке использовать код, который вы использовали – hardillb

ответ

0

В вашей OnCreate

private String uniqueID; 
String ip="brokerip"; 
String port="brokerport usaly 1883" 
String broker = "tcp://" + ip + ":" + port; 

uniqueID = android.provider.Settings.Secure.getString(getContentResolver(), android.provider.Settings.Secure.ANDROID_ID); 

IMqttAsyncClient client= new MqttAsyncClient(broker, uniqueID, new MemoryPersistence()); 
mqttClient.subscribe("YOURTOPIC/", 0); 
mqttClient.subscribe("YOUROTHERTOPIC", 0); 

, а затем в методе:

public void messageArrived(String topic, MqttMessage msg) throws Exception { 
    Log.i("mqttarrival", "Message arrived from topic " + topic); 

    if (topic.equals("YOURTOPIC")) { 
     System.out.println(msg.toString()); 
    }  
    else { 
    } 
} 
+1

Добро пожаловать в Stack Overflow! Я рекомендую вам [принять тур] (http://stackoverflow.com/tour). –

Смежные вопросы