【问题标题】:Android - MQTT and MosquittoAndroid - MQTT 和 Mosquitto
【发布时间】:2020-08-20 03:35:10
【问题描述】:

我正在一个项目中尝试发布和订阅 MQTTHOST test.mosquitto.org:1833 但是当我运行我的代码时,总是会出现“你的应用程序一直在停止”。

我使用了 youtube 视频中的相同代码 (Paho)​​:https://www.youtube.com/watch?v=BAkGm02WBc0

我的代码:

主活动

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'
    }
}

活动主要

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

【问题讨论】:

  • 请不要发布文字图片,对于使用屏幕阅读器的人来说,它们真的很难阅读并且不可能。您需要确保将错误打印到日志中,然后在问题中包含格式正确的日志文本。因为我们看不到足够的上下文来提供适当的帮助,因为我们需要看到更多的IlegalArgumentException

标签: java android mqtt mosquitto paho


【解决方案1】:

正如我在 cmets 中所说,如果没有完整的异常堆栈跟踪,这个问题是不可能正确回答的,但我会猜测一下

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

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

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

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

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2015-08-18
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多