安卓 – MQTT 和 Mosquitto

huangapple go评论82阅读模式
英文:

Android - MQTT and Mosquitto

问题

I'm working in a project that trying to publish and subscribe to the MQTTHOST test.mosquitto.org:1833
But when I run my code, always occurs "your app keeps stopping".

I used the same code from the YouTube video (Paho): https://www.youtube.com/watch?v=BAkGm02WBc0

My code:

MainActivity

package com.carlospacheco.mce_app_ifsp;

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 = "test.mosquitto.org:1883";
    static String USERNAME = "";
    static String PASSWORD = "";
    String topicStr = "LED";

    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, "Conectado!", Toast.LENGTH_LONG).show();
                }

                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Toast.makeText(MainActivity.this, "Conexão Falhou!", Toast.LENGTH_LONG).show();
                }
            });
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }

    public void pub(View v) {
        String topic = topicStr;
        String message = "hello world from ifi gaming";
        try {
            client.publish(topic, message.getBytes(), 0, false);
        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
}

build.gradle

apply plugin: 'com.android.application'

android {
    compileSdkVersion 29
    buildToolsVersion "29.0.3"
    defaultConfig {
        applicationId "com.carlospacheco.mce_app_ifsp"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}
repositories {
    maven {
        url "https://repo.eclipse.org/content/repositories/paho-releases/"
    }
}
dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
    implementation 'androidx.localbroadcastmanager:localbroadcastmanager:1.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.1'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
    compile('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
        exclude module: 'support-v4'
    }
}

activity main

<?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">

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Conectar"
        android:onClick="pub"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="45dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

安卓 – MQTT 和 Mosquitto

英文:

I'm working in a project that trying to publish and subscribe to the MQTTHOST test.mosquitto.org:1833
But when I run my code, always occurrs "you app keeps stopping".

I used the same code from the youtube video, (Paho): https://www.youtube.com/watch?v=BAkGm02WBc0

My code:

MainActivity

package com.carlospacheco.mce_app_ifsp;
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  = &quot;test.mosquitto.org:1883&quot;;
static String USERNAME  = &quot;&quot;;
static String PASSWORD  = &quot;&quot;;
String topicStr = &quot;LED&quot;;
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,&quot;Conectado!&quot;, Toast.LENGTH_LONG).show();
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
Toast.makeText(MainActivity.this,&quot;Conex&#227;o Falhou!&quot;, Toast.LENGTH_LONG).show();
}
});
} catch (MqttException e) {
e.printStackTrace();
}
}
public void pub(View v){
String topic = topicStr;
String message = &quot;hello world from ifi gaming&quot;;
try {
client.publish(topic, message.getBytes(),0, false);
} catch (MqttException e) {
e.printStackTrace();
}
}
}

build.gradle

apply plugin: &#39;com.android.application&#39;
android {
compileSdkVersion 29
buildToolsVersion &quot;29.0.3&quot;
defaultConfig {
applicationId &quot;com.carlospacheco.mce_app_ifsp&quot;
minSdkVersion 16
targetSdkVersion 29
versionCode 1
versionName &quot;1.0&quot;
testInstrumentationRunner &quot;androidx.test.runner.AndroidJUnitRunner&quot;
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile(&#39;proguard-android-optimize.txt&#39;), &#39;proguard-rules.pro&#39;
}
}
}
repositories {
maven {
url &quot;https://repo.eclipse.org/content/repositories/paho-releases/&quot;
}
}
dependencies {
implementation fileTree(dir: &#39;libs&#39;, include: [&#39;*.jar&#39;])
implementation &#39;androidx.appcompat:appcompat:1.2.0&#39;
implementation &#39;androidx.constraintlayout:constraintlayout:1.1.3&#39;
implementation &#39;androidx.localbroadcastmanager:localbroadcastmanager:1.0.0&#39;
testImplementation &#39;junit:junit:4.12&#39;
androidTestImplementation &#39;androidx.test.ext:junit:1.1.1&#39;
androidTestImplementation &#39;androidx.test.espresso:espresso-core:3.2.0&#39;
compile(&#39;org.eclipse.paho:org.eclipse.paho.android.service:1.0.2&#39;) {
exclude module: &#39;support-v4&#39;
}
}

activity main

&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
xmlns:tools=&quot;http://schemas.android.com/tools&quot;
android:layout_width=&quot;match_parent&quot;
android:layout_height=&quot;match_parent&quot;
tools:context=&quot;.MainActivity&quot;&gt;
&lt;Button
android:id=&quot;@+id/button&quot;
android:layout_width=&quot;wrap_content&quot;
android:layout_height=&quot;wrap_content&quot;
android:text=&quot;Conectar&quot;
android:onClick=&quot;pub&quot;
app:layout_constraintEnd_toEndOf=&quot;parent&quot;
app:layout_constraintStart_toStartOf=&quot;parent&quot;
tools:layout_editor_absoluteY=&quot;45dp&quot; /&gt;
&lt;/androidx.constraintlayout.widget.ConstraintLayout&gt;

安卓 – MQTT 和 Mosquitto

答案1

得分: 1

正如我在评论中所说,如果没有完整的异常堆栈跟踪,很难正确地回答这个问题,但我会猜一下。

变量 MQTTHOST 的值应该是一个指向 MQTT 代理的完整 URI。目前你使用的是 test.mosquitto.org:1883,这并不是一个完整的 URI。

一个完整的 URI 需要在主机部分之前包含一个协议。

在这种情况下,你需要在主机和端口组件之前添加 tcp://mqtt://

static String MQTTHOST = "tcp://test.mosquitto.org:1883";
英文:

As I said in the comments, without the full exception stack trace this question is impossible to answer properly but I'll take a guess

The value of MQTTHOST is supposed to be a full URI pointing at the MQTT broker. At the moment you have test.mosquitto.org:1883 which is not a full URI.

A full URI needs to include a protocol before the host section.

In this case you need to add either tcp:// or mqtt:// before the host and port components.

static String MQTTHOST = &quot;tcp://test.mosquitto.org:1883&quot;;

huangapple
  • 本文由 发表于 2020年8月20日 11:35:10
  • 转载请务必保留本文链接:https://go.coder-hub.com/63497915.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定