Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème Java MQTT Android Studio

    22 avril 2021 à 20:22:17

    Bonjour à tous,

    J'essaie de me connecter à un serveur MQTT hébergé sur mon ordi avec Mosquitto.

    J'ai constitué un programme grâce à des recherches internet pour publier un message texte sur ce serveur (je connais pas du tout le Java) pour faire une appli android sur Android Studio, avec Gradle.

    Un erreur apparaît lorsque je teste le programme.

    Voici mon Main Java :

    package tksi.example.com;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Toast;
    
    import org.eclipse.paho.android.service.MqttAndroidClient;
    import org.eclipse.paho.client.mqttv3.IMqttActionListener;
    import org.eclipse.paho.client.mqttv3.IMqttToken;
    import org.eclipse.paho.client.mqttv3.MqttClient;
    import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
    import org.eclipse.paho.client.mqttv3.MqttException;
    
    public class MainActivity extends AppCompatActivity {
    
        static String MQTTHOST = "tcp://localhost:1883";
        static String USERNAME = "test1";
        static String PASSWORD = "test2";
        String topicStr = "test3";
    
        MqttAndroidClient client;
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            String clientId = MqttClient.generateClientId();
            client = new MqttAndroidClient(this.getApplicationContext(), MQTTHOST, clientId);
    
            MqttConnectOptions options = new MqttConnectOptions();
            options.setUserName(USERNAME);
            options.setPassword(PASSWORD.toCharArray());
    
            try {
                IMqttToken token = client.connect(options);
                token.setActionCallback(new IMqttActionListener() {
                    @Override
                    public void onSuccess(IMqttToken asyncActionToken) {
                        Toast.makeText(MainActivity.this, "connected!!", Toast.LENGTH_LONG).show();
                    }
    
                    @Override
                    public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                        Toast.makeText(MainActivity.this, "connection failed", Toast.LENGTH_LONG).show();
                    }
                });
            } catch (MqttException e) {
                e.printStackTrace();
            }
    
        }
    
        public void pub(View v){
            String topic = topicStr; //Tester modifier les String par des int
            String message = "hello"; //Tester modifier les String par des int
            byte[] encodedPayload = new byte[0];
            try {
                client.publish(topic, message.getBytes(), 0, false);
            } catch (MqttException e) {
                e.printStackTrace();
            }
        }
    
    
    }

    Et j'ai rajouté des dépendances Gradle :

    implementation 'androidx.appcompat:appcompat:1.2.0'
        implementation 'com.google.android.material:material:1.3.0'
        implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
        testImplementation 'junit:junit:4.+'
        androidTestImplementation 'androidx.test.ext:junit:1.1.2'
        androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
        //noinspection GradleCompatible
        compile 'com.android.support:appcompat-v7:23.2.1'
        compile('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
            exclude module: 'support-v4'

    Et une association à maven et permissions dans android manifest :

    repositories {
        maven {
            url "https://repo.eclipse.org/content/repositories/paho-releases/"
        }
    }
    <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />

    J'ai donc ces erreurs :

    E/AndroidRuntime: FATAL EXCEPTION: MQTT Con: paho8470168934700
        Process: tksi.example.com, PID: 18968
        java.lang.NullPointerException: cancel() called with a null PendingIntent
            at android.app.AlarmManager.cancel(AlarmManager.java:919)
            at org.eclipse.paho.android.service.AlarmPingSender.stop(AlarmPingSender.java:86)
            at org.eclipse.paho.client.mqttv3.internal.ClientComms.shutdownConnection(ClientComms.java:327)
            at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:608)
            at java.lang.Thread.run(Thread.java:923)

    Et de plus l'appli crash quand je veut la lancer.

    J'ai conscience que ce que je demande est loufoque (je m'y connais pas du tout en Java, je le répète), mais j'ai beau chercher partout sur internet, je trouve rien.

    Merci de vos retours.





    • Partager sur Facebook
    • Partager sur Twitter

    Problème Java MQTT Android Studio

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown