Difference between revisions of "MQTT: Android Client Simple"
		
		
		
		
		
		Jump to navigation
		Jump to search
		
				
		
		
	
| Onnowpurbo (talk | contribs) | Onnowpurbo (talk | contribs)  | ||
| (4 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
| − | + | '''PROBLEM:''' class startMqtt(); | |
| − | |||
| − | + | ==settings.gradle== | |
| − | + |  pluginManagement { | |
| − | - | + |      repositories { | 
| − | + |          gradlePluginPortal() | |
| + |          google() | ||
| + |          mavenCentral() | ||
| + |          maven { | ||
| + |              url "https://repo.eclipse.org/content/repositories/paho-snapshots/" | ||
| + |          } | ||
| + |      } | ||
| + |  } | ||
| + |  dependencyResolutionManagement { | ||
| + |      repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) | ||
| + |      repositories { | ||
| + |          google() | ||
| + |          mavenCentral() | ||
| + |          maven { | ||
| + |              url "https://repo.eclipse.org/content/repositories/paho-snapshots/" | ||
| + |          } | ||
| + |      } | ||
| + |  } | ||
| + |  rootProject.name = "ITTSMQTTWildan" | ||
| + |  include ':app' | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | ==build.gradle (app)== | |
| − | |||
| − | + |  .... | |
| + |  dependencies { | ||
| + |      ..... | ||
| + |      implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0' | ||
| + |      implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'  | ||
| + |  } | ||
| − | |||
| − | + | ==main_activity.xml== | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + |  <?xml version="1.0" encoding="utf-8"?> | |
| − | + |  <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" | |
| − | + |      xmlns:app="http://schemas.android.com/apk/res-auto" | |
| − | + |      xmlns:tools="http://schemas.android.com/tools" | |
| − | + |      android:layout_width="match_parent" | |
| + |      android:layout_height="match_parent" | ||
| + |      tools:context=".MainActivity"> | ||
| + | |||
| + |      <TextView | ||
| + |          android:id="@+id/dataReceived" | ||
| + |          android:layout_width="wrap_content" | ||
| + |          android:layout_height="wrap_content" | ||
| + |          app:layout_constraintBottom_toBottomOf="parent" | ||
| + |          app:layout_constraintLeft_toLeftOf="parent" | ||
| + |          app:layout_constraintRight_toRightOf="parent" | ||
| + |          app:layout_constraintTop_toTopOf="parent" /> | ||
| + | |||
| + |  </androidx.constraintlayout.widget.ConstraintLayout> | ||
| − | |||
| − | |||
| − | + | ==Package helpers== | |
| − | + |  package itts.onno.ittsmqttwildan.helpers; | |
| − | + | ||
| − | + |  import android.content.Context; | |
| − | + |  import android.util.Log; | |
| − | + | ||
| − | + |  import org.eclipse.paho.android.service.MqttAndroidClient; | |
| − | + |  import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions; | |
| − | + |  import org.eclipse.paho.client.mqttv3.IMqttActionListener; | |
| − | + |  import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; | |
| − | + |  import org.eclipse.paho.client.mqttv3.IMqttToken; | |
| − | + |  import org.eclipse.paho.client.mqttv3.MqttCallbackExtended; | |
| − | + |  import org.eclipse.paho.client.mqttv3.MqttConnectOptions; | |
| − | + |   import org.eclipse.paho.client.mqttv3.MqttException; | |
| − | + |  import org.eclipse.paho.client.mqttv3.MqttMessage; | |
| − | + | ||
| − | + |  public class MqttHelper { | |
| − | + |      public MqttAndroidClient mqttAndroidClient; | |
| − | + | ||
| − | + |      final String serverUri = "tcp://192.168.0.111:1883"; | |
| − | + | ||
| − | + |      final String clientId = "ExampleAndroidClient"; | |
| − | + |      final String subscriptionTopic = "event"; | |
| − | + | ||
| − | + |      final String username = "test"; | |
| − | + |      final String password = "123456"; | |
| − | + | ||
| − | + |      public MqttHelper(Context context) { | |
| − | public class MqttHelper { | + |          mqttAndroidClient = new MqttAndroidClient(context, serverUri, clientId); | 
| − | + |          mqttAndroidClient.setCallback(new 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("Mqtt", mqttMessage.toString()); | |
| − | + |              } | |
| − | + | ||
| − | + |              @Override | |
| − | + |              public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { | |
| − | + |              } | |
| − | + |          }); | |
| − | + |          connect(); | |
| − | + |      } | |
| − | + | ||
| − | + |      public void setCallback(MqttCallbackExtended callback) { | |
| − | + |          mqttAndroidClient.setCallback(callback); | |
| − | + |      } | |
| − | + | ||
| − | + |      private void connect(){ | |
| − | + |          MqttConnectOptions mqttConnectOptions = new MqttConnectOptions(); | |
| − | + |          mqttConnectOptions.setAutomaticReconnect(true); | |
| − | + |          mqttConnectOptions.setCleanSession(false); | |
| − | + |          mqttConnectOptions.setUserName(username); | |
| − | + |          mqttConnectOptions.setPassword(password.toCharArray());   | |
| − | + | ||
| − | + |          try { | |
| − | + | ||
| − | + |              mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() { | |
| − | + |                  @Override | |
| − | + |                  public void onSuccess(IMqttToken asyncActionToken) { | |
| − | + | ||
| − | + |                      DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions(); | |
| − | + |                      disconnectedBufferOptions.setBufferEnabled(true); | |
| − | + |                      disconnectedBufferOptions.setBufferSize(100); | |
| − | + |                      disconnectedBufferOptions.setPersistBuffer(false); | |
| − | + |                      disconnectedBufferOptions.setDeleteOldestMessages(false); | |
| − | + |                      mqttAndroidClient.setBufferOpts(disconnectedBufferOptions); | |
| − | + |                      subscribeToTopic(); | |
| − | + |                  } | |
| − | + | ||
| − | + |                  @Override | |
| − | + |                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) { | |
| − | + |                      Log.w("Mqtt", "Failed to connect to: " + serverUri + exception.toString()); | |
| − | + |                  } | |
| + |              }); | ||
| + | |||
| + |          } catch (MqttException ex){ | ||
| + |              ex.printStackTrace(); | ||
| + |          } | ||
| + |      } | ||
| + | |||
| + |      private void subscribeToTopic() { | ||
| + |          try { | ||
| + |              mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() { | ||
| + |                  @Override | ||
| + |                  public void onSuccess(IMqttToken asyncActionToken) { | ||
| + |                      Log.w("Mqtt","Subscribed!"); | ||
| + |                  } | ||
| + | |||
| + |                  @Override | ||
| + |                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) { | ||
| + |                      Log.w("Mqtt", "Subscribed fail!"); | ||
| + |                  } | ||
| + |              }); | ||
| + | |||
| + |          } catch (MqttException ex) { | ||
| + |              System.err.println("Exception whilst subscribing"); | ||
| + |              ex.printStackTrace(); | ||
| + |          } | ||
| + |      } | ||
| + | |||
| + | |||
| + |  } | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | ==MainActivity.java== | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | + |  package itts.onno.ittsmqttwildan; | |
| − | + | ||
| − | + |  import androidx.appcompat.app.AppCompatActivity;  | |
| − | + | ||
| − | + |  import android.os.Bundle; | |
| − | + |  import android.util.Log; | |
| − | + |  import android.widget.TextView; | |
| − | + | ||
| − | + |  import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; | |
| − | + |  import org.eclipse.paho.client.mqttv3.MqttCallbackExtended; | |
| − | + |  import org.eclipse.paho.client.mqttv3.MqttMessage; | |
| − | + | ||
| − | + |  import itts.onno.ittsmqttwildan.helpers.MqttHelper; | |
| − | + | ||
| − | + |  public class MainActivity extends AppCompatActivity { | |
| − | + | ||
| − | + |      MqttHelper mqttHelper; | |
| − | + |      TextView dataReceived; | |
| − | + | ||
| − | + |      @Override | |
| − | + |      protected void onCreate(Bundle savedInstanceState) { | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | public class MainActivity extends AppCompatActivity { | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|           super.onCreate(savedInstanceState); |           super.onCreate(savedInstanceState); | ||
| − |           setContentView(R.layout.activity_main); | + |           setContentView(R.layout.activity_main);   | 
| − | + | ||
|           dataReceived = (TextView) findViewById(R.id.dataReceived); |           dataReceived = (TextView) findViewById(R.id.dataReceived); | ||
| − | + | ||
| − |           startMqtt(); | + |           // ------- problem & crashing------------- | 
| − | + |          // startMqtt(); | |
| − | + |      } | |
| − | + | ||
| + |      private void startMqtt(){ | ||
|           mqttHelper = new MqttHelper(getApplicationContext()); |           mqttHelper = new MqttHelper(getApplicationContext()); | ||
|           mqttHelper.setCallback(new MqttCallbackExtended() { |           mqttHelper.setCallback(new MqttCallbackExtended() { | ||
|               @Override |               @Override | ||
|               public void connectComplete(boolean b, String s) { |               public void connectComplete(boolean b, String s) { | ||
| − | + | ||
|               } |               } | ||
| − | + | ||
|               @Override |               @Override | ||
|               public void connectionLost(Throwable throwable) { |               public void connectionLost(Throwable throwable) { | ||
| − | + | ||
|               } |               } | ||
| − | + | ||
|               @Override |               @Override | ||
|               public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { |               public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { | ||
| Line 207: | Line 228: | ||
|                   dataReceived.setText(mqttMessage.toString()); |                   dataReceived.setText(mqttMessage.toString()); | ||
|               } |               } | ||
| − | + | ||
|               @Override |               @Override | ||
|               public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { |               public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { | ||
| − | + | ||
|               } |               } | ||
| − | + |           }); | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
|      } |      } | ||
| − | + | ||
| − | + |  } | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| Line 513: | Line 245: | ||
| ==Referensi== | ==Referensi== | ||
| + | * https://github.com/wildan2711/mqtt-android-tutorial | ||
| * https://wildanmsyah.wordpress.com/2017/05/11/mqtt-android-client-tutorial/ | * https://wildanmsyah.wordpress.com/2017/05/11/mqtt-android-client-tutorial/ | ||
| * https://github.com/wildan2711/mqtt-android-tutorial | * https://github.com/wildan2711/mqtt-android-tutorial | ||
| * https://medium.com/swlh/android-and-mqtt-a-simple-guide-cb0cbba1931c | * https://medium.com/swlh/android-and-mqtt-a-simple-guide-cb0cbba1931c | ||
| * https://www.eclipse.org/paho/index.php?page=clients/android/index.php | * https://www.eclipse.org/paho/index.php?page=clients/android/index.php | ||
Latest revision as of 09:53, 9 April 2022
PROBLEM: class startMqtt();
settings.gradle
pluginManagement {
    repositories {
        gradlePluginPortal()
        google()
        mavenCentral()
        maven {
            url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
        }
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        google()
        mavenCentral()
        maven {
            url "https://repo.eclipse.org/content/repositories/paho-snapshots/"
        }
    }
}
rootProject.name = "ITTSMQTTWildan"
include ':app'
build.gradle (app)
....
dependencies {
    .....
    implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
    implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' 
}
main_activity.xml
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <TextView android:id="@+id/dataReceived" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Package helpers
package itts.onno.ittsmqttwildan.helpers;
import android.content.Context;
import android.util.Log;
import org.eclipse.paho.android.service.MqttAndroidClient;
import org.eclipse.paho.client.mqttv3.DisconnectedBufferOptions;
import org.eclipse.paho.client.mqttv3.IMqttActionListener;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.IMqttToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class MqttHelper {
    public MqttAndroidClient mqttAndroidClient;
    final String serverUri = "tcp://192.168.0.111:1883";
    final String clientId = "ExampleAndroidClient";
    final String subscriptionTopic = "event";
    final String username = "test";
    final String password = "123456";
    public MqttHelper(Context context) {
        mqttAndroidClient = new MqttAndroidClient(context, serverUri, clientId);
        mqttAndroidClient.setCallback(new 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("Mqtt", mqttMessage.toString());
            }
            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
            }
        });
        connect();
    }
    public void setCallback(MqttCallbackExtended callback) {
        mqttAndroidClient.setCallback(callback);
    }
    private void connect(){
        MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
        mqttConnectOptions.setAutomaticReconnect(true);
        mqttConnectOptions.setCleanSession(false);
        mqttConnectOptions.setUserName(username);
        mqttConnectOptions.setPassword(password.toCharArray());  
        try {
            mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    DisconnectedBufferOptions disconnectedBufferOptions = new DisconnectedBufferOptions();
                    disconnectedBufferOptions.setBufferEnabled(true);
                    disconnectedBufferOptions.setBufferSize(100);
                    disconnectedBufferOptions.setPersistBuffer(false);
                    disconnectedBufferOptions.setDeleteOldestMessages(false);
                    mqttAndroidClient.setBufferOpts(disconnectedBufferOptions);
                    subscribeToTopic();
                }
                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.w("Mqtt", "Failed to connect to: " + serverUri + exception.toString());
                }
            });
        } catch (MqttException ex){
            ex.printStackTrace();
        }
    }
    private void subscribeToTopic() {
        try {
            mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    Log.w("Mqtt","Subscribed!");
                }
 
                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.w("Mqtt", "Subscribed fail!");
                }
            });
        } catch (MqttException ex) {
            System.err.println("Exception whilst subscribing");
            ex.printStackTrace();
        }
    }
}
MainActivity.java
package itts.onno.ittsmqttwildan;
import androidx.appcompat.app.AppCompatActivity; 
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallbackExtended;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import itts.onno.ittsmqttwildan.helpers.MqttHelper;
public class MainActivity extends AppCompatActivity {
    MqttHelper mqttHelper;
    TextView dataReceived;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 
        dataReceived = (TextView) findViewById(R.id.dataReceived);
        // ------- problem & crashing-------------
        // startMqtt();
    }
    private void startMqtt(){
        mqttHelper = new MqttHelper(getApplicationContext());
        mqttHelper.setCallback(new 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 {
                Log.w("Debug",mqttMessage.toString());
                dataReceived.setText(mqttMessage.toString());
            }
            @Override
            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
            }
         });
   }
 
}
Referensi
- https://github.com/wildan2711/mqtt-android-tutorial
- https://wildanmsyah.wordpress.com/2017/05/11/mqtt-android-client-tutorial/
- https://github.com/wildan2711/mqtt-android-tutorial
- https://medium.com/swlh/android-and-mqtt-a-simple-guide-cb0cbba1931c
- https://www.eclipse.org/paho/index.php?page=clients/android/index.php