MQTT协议 Android 客户端使用笔记

下载

org.eclipse.paho.client.mqttv3.jar 下载地址

https://repo.eclipse.org/content/repositories/paho-releases/org/eclipse/paho/

在这里插入图片描述
在这里插入图片描述
选则一个
在这里插入图片描述

原文链接

简单使用(客户端)

0.变量

    MqttClient mqttClient;
    EditText editText;
    static String HOST="tcp://192.168.0.204:1883";//服务端地址,端口
    static String CLIENT_ID="androidd",TAG="TAG";//CLIENT_ID 服务端标识  TAG 打印日志信息
    MqttConnectOptions mqttConnectOptions; 

1.初始化

  private void init() {
    
    
        try {
    
    
            mqttClient=new MqttClient(HOST,CLIENT_ID,new MemoryPersistence());
            mqttConnectOptions=new MqttConnectOptions();

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

2.连接服务端

             mqttClient.connect(mqttConnectOptions);

3.订阅和取消订阅 editText.getText().toString().trim() 获取要订阅的 标题(可以看成一个订阅的id标识)

    public void oncick(View view) {
    
    
        if (editText.getText().toString().trim().equals("")||editText.getText().toString().trim()==null)return;
        switch (view.getId()){
    
    
            case R.id.button2://订阅
                try {
    
    
                    Log.i(TAG, "oncick: "+editText.getText().toString().trim());
                    //  mqttClient.subscribe(editText.getText().toString().trim(),1); 
                    // 1 表示一级订阅 服务器只发 2 表示二级订阅 客户端会响应一个信息告诉服务器 3. 表示三级订阅 三次握手 和tcp一样
                     
                    mqttClient.subscribe(editText.getText().toString().trim(),1);
                    
                } catch (MqttException e) {
    
    
                    e.printStackTrace();
                }
                break;
            case R.id.button3://取消订阅
                try {
    
    
                    mqttClient.unsubscribe(editText.getText().toString().trim());
                } catch (MqttException e) {
    
    
                    e.printStackTrace();
                }
                break;
            case R.id.button4://连接
                try {
    
    
                    mqttClient.connect(mqttConnectOptions);
                    dy();
                } catch (MqttException e) {
    
    
                    e.printStackTrace();
                }
                break;
        }
    }

4.获取订阅内容

扫描二维码关注公众号,回复: 15848231 查看本文章
  private void dy() {
    
    
       new Thread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                    mqttClient.setCallback(new MqttCallback() {
    
    
                        @Override
                        public void connectionLost(Throwable throwable) {
    
    
                        }
                        @Override
                        public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
    
    
                            String data="订阅标题:"+s+" -- 级别:"+mqttMessage.getQos()+" --                 订阅内容:"+ new String(mqttMessage.getPayload(),"utf-8");
                        
                        }
                        @Override
                        public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
    
    
                            Log.i(TAG, "deliveryComplete: "+"222222");
                        }
                    });
                    while (true){
    
    
                        try {
    
    
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
    
    
                            e.printStackTrace();
                        }
                    }
            }
        }).start();
    }

注意点(报错)

1.要重复接收订阅数据,要阻塞方法。(解决只能接收一次订阅信息的方法)

private void dy() {
    
    
       new Thread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                    mqttClient.setCallback(new MqttCallback() {
    
    
                        @Override
                        public void connectionLost(Throwable throwable) {
    
    
                            Log.i(TAG, "deliveryComplete: "+"0000000");
                        }

                        @Override
                        public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
    
    
                            String data="订阅标题:"+s+" -- 级别:"+mqttMessage.getQos()+" -- 订阅内容:"+ new String(mqttMessage.getPayload(),"utf-8");
                            Log.i(TAG, "messageArrived: "+"1111111111");
                        }

                        @Override
                        public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
    
    
                            Log.i(TAG, "deliveryComplete: "+"222222");
                        }
                    });
                    while (true){
    
       //阻塞方法
                        try {
    
    
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
    
    
                            e.printStackTrace();
                        }
                    }
            }
        }).start();
    }

2.接收的数据是byte类型

@Override
                public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
    
    
                     String data="订阅标题:"+s+" -- 级别:"+mqttMessage.getQos()+" --                                 订阅内容:"+ new String(mqttMessage.getPayload(),"utf-8");    
                 }

3.报错URL地址格式不对

//正确的格式 tcp://xxxx:xxx
 static String HOST="tcp://192.168.0.204:1883";

完整的代码(Android 客户端 简单的)

package com.example.lzz.mqttclient;

import android.media.TimedText;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class MainActivity extends AppCompatActivity {
    
    

    MqttClient mqttClient;
    EditText editText;
    static String HOST="tcp://192.168.0.204:1883";
    static String CLIENT_ID="androidd",TAG="TAG";
    MqttConnectOptions mqttConnectOptions;
    TextView textView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    
    
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView=findViewById(R.id.textView6);
        editText=findViewById(R.id.editText2);
        init();
    }

    private void init() {
    
    
        try {
    
    
            mqttClient=new MqttClient(HOST,CLIENT_ID,new MemoryPersistence());
            mqttConnectOptions=new MqttConnectOptions();
        } catch (MqttException e) {
    
    
            e.printStackTrace();
        }
    }

    private void dy() {
    
    
       new Thread(new Runnable() {
    
    
            @Override
            public void run() {
    
    
                    mqttClient.setCallback(new MqttCallback() {
    
    
                        @Override
                        public void connectionLost(Throwable throwable) {
    
    
                        }
                        @Override
                        public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
    
    
                            String data="订阅标题:"+s+" -- 级别:"+mqttMessage.getQos()+" -- 订阅内容:"+ new String(mqttMessage.getPayload(),"utf-8");
                        }

                        @Override
                        public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
    
    
                        }
                    });
                    while (true){
    
    
                        try {
    
    
                            Thread.sleep(5000);
                        } catch (InterruptedException e) {
    
    
                            e.printStackTrace();
                        }
                    }
            }
        }).start();
    }

    public void oncick(View view) {
    
    
        if (editText.getText().toString().trim().equals("")||editText.getText().toString().trim()==null)return;
        switch (view.getId()){
    
    
            case R.id.button2:
                try {
    
    
                    Log.i(TAG, "oncick: "+editText.getText().toString().trim());
                    mqttClient.subscribe(editText.getText().toString().trim(),1);
                } catch (MqttException e) {
    
    
                    e.printStackTrace();
                }
                break;
            case R.id.button3:
                try {
    
    
                    mqttClient.unsubscribe(editText.getText().toString().trim());
                } catch (MqttException e) {
    
    
                    e.printStackTrace();
                }
                break;
            case R.id.button4:
                try {
    
    
                    mqttClient.connect(mqttConnectOptions);
                    dy();
                } catch (MqttException e) {
    
    
                    e.printStackTrace();
                }
                break;
        }
    }

}

猜你喜欢

转载自blog.csdn.net/LiuxXn/article/details/112238707