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.获取订阅内容

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

}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值