简体   繁体   中英

MQTT Android Studio and Raspberry PI Broker

I'm learning MQTT and Android Studio. I want to make a simple application in Android Studio but I'm fighting from 4 days and I can`t cope with it.

Application Description: 1 Button ---> Push ---> Send to mqtt topic / message ( "mqtt" / "test" ) That`s all.

Mqtt Broker = rpi (IP: namerpibrok.ddns.net ) 

Broker works fine and it does not need a password or username

Problem is with Aplication - that is my first work with Android Studio.

I did everything as described on the page: https://www.hivemq.com/blog/mqtt-client-library-enyclopedia-paho-android-service

Now, when I push the button .... nothing happens.

    MqttAndroidClient client;

    private static final String TAG = "LOG";

    // Used to load the 'native-lib' library on application startup.
static {
    System.loadLibrary("native-lib");
}

    private Object bytes;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    String clientId = MqttClient.generateClientId();
    client = new MqttAndroidClient(this.getApplicationContext(), "rpidomwroled.ddns.net:1883", clientId);

        MqttConnectOptions options = new MqttConnectOptions();

    try {
        IMqttToken token = client.connect(options);
        token.setActionCallback(new IMqttActionListener() {
            @Override
            public void onSuccess(IMqttToken asyncActionToken) {
                // We are connected
                                    Toast.makeText(MainActivity.this,"Połączono", Toast.LENGTH_LONG).show();

            }

            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                // Something went wrong e.g. connection timeout or firewall problems
                Toast.makeText(MainActivity.this,"Połączono", Toast.LENGTH_LONG).show();

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



    MqttAndroidClient client;

    private static final String TAG = "LOG";

    // Used to load the 'native-lib' library on application startup.
static {
    System.loadLibrary("native-lib");
}

    private Object bytes;

    @Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    String clientId = MqttClient.generateClientId();
    client = new MqttAndroidClient(this.getApplicationContext(), "rpidomwroled.ddns.net:1883", clientId);

        MqttConnectOptions options = new MqttConnectOptions();

    try {
        IMqttToken token = client.connect(options);
        token.setActionCallback(new IMqttActionListener() {
            @Override
            public void onSuccess(IMqttToken asyncActionToken) {
                // We are connected
                                    Toast.makeText(MainActivity.this,"Połączono", Toast.LENGTH_LONG).show();

            }

            @Override
            public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                // Something went wrong e.g. connection timeout or firewall problems
                Toast.makeText(MainActivity.this,"Połączono", Toast.LENGTH_LONG).show();

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

 public void pub(View v) { String topic = "mqtt"; String payload = "mqtt"; byte[] encodedPayload = new byte[0]; try { encodedPayload = payload.getBytes("UTF-8"); MqttMessage message = new MqttMessage(encodedPayload); client.publish(topic, message); } catch (UnsupportedEncodingException | MqttException e) { e.printStackTrace(); } } } 

Can anybody tell me what I'm doing wrong?

This code is worked for me

String topic = "mqtt";
MqttMessage message = new MqttMessage();
message.setPayload("Message from IoT dev".getBytes());
client.publish(topic, message);

you can get call backs in

client.setCallback(new IoTCallbacks() {
                @Override
                public void connectionLost(Throwable cause) {

                }

                @Override
                public void messageArrived(String topic, MqttMessage message) throws Exception {

                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken token) {

                }
            });

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM