小工具知识网

当前位置: 首页 > 行业知识 > Android MQTT连接阿里云使用Json解析数据

行业知识

Android MQTT连接阿里云使用Json解析数据

2026-11-03 06:30:48 来源:互联网转载

Android Studio 连接阿里云订阅主题然后使用JSON解析数据非常好用

  • 导入MQTT的JAR包
    • 1、在项目中添加依赖然后使用Studio 去下载库
    • 2、直接下载JAR包,然后作为库进行导入
    • 环境验证:
    • 给程序进行联网权限
    • XML布局文件
      • 效果如下:
      • MainActitive.java 主要代码如下:
      • End

        导入MQTT的JAR包

        这里有两种方法:

        1、在项目中添加依赖然后使用Studio 去下载库

        2、直接下载JAR包,然后作为库进行导入

        这里先介绍第一种方法:

        切换到Android 目录:

        按照如下图,添加依赖即可:

          implementation ("org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0")

        第二种方法:

        打开Android Studio 然后切换到Android 目录找到Lib文件夹,将MQTT的JAR包复制进去即可。

        然后点击project目录然后将MQTT JAR包导进去

        添加完成之后作为库导入工程中

        环境验证:

        在MainActivity 任取一个地方输入MQTT 看是否有提示弹窗。

        到这里以及成功一半了。接下来就是设置一些权限问题

        给程序进行联网权限

        切换到按的Android 目录

        找到如下的目录:

        添加如代码:

              

        XML布局文件

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                

        效果如下:

        MainActitive.java 主要代码如下:

        package com.example.ks_wfs;import androidx.appcompat.app.AlertDialog;import androidx.appcompat.app.AppCompatActivity;import android.annotation.SuppressLint;import android.content.DialogInterface;import android.net.wifi.aware.DiscoverySession;import android.os.Bundle;import android.os.Handler;import android.os.Looper;import android.os.Message;import android.util.Log;import android.view.View;import android.widget.ImageView;import android.widget.TextView;import android.widget.Toast;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;import org.json.JSONException;import org.json.JSONObject;import java.util.concurrent.ScheduledExecutorService;public class MainActivity extends AppCompatActivity {    private Handler handler;    private String serverUri = "自己的IP地址";/*    private String serverUri = "tcp://iot.qaeb.cn:1883";*/    /*          这里可以填上各种云平台的物联网云平的域名+1883端口号,什么阿里云腾讯云百度云天工物接入都可以,          这里我填的是我在我的阿里云服务器上搭建的EMQ平台的地址,          注意:前缀“tcp://”不可少,之前我没写,怎么都连不上,折腾了好久    */    private String userName = " ";    private String passWord = " ";    private String clientId = "app"+System.currentTimeMillis(); //clientId很重要,不能重复,否则就会连不上,所以我定义成 app+当前时间    private String mqtt_sub_topic = "/iotsoil/post";          //需要订阅的主题    private String mqtt_pub_topic = "xiao";                  //需要发布的主题    private MqttClient mqtt_client;                         //创建一个mqtt_client对象    MqttConnectOptions options;    private  TextView air_temp;    private  TextView air_humi;    private  TextView sloi_humi;    private  TextView soli_n;    private  TextView soil_p;    private  TextView soil_k;    private ImageView test;    private ScheduledExecutorService scheduler;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        /*         * xiaobai         * 2023.10.10         * Version V1.0         */        /*绑定UI文件*/        UI_Init();/*类似单片机的初始化*/        mqtt_init_Connect();/*初始化连接函数*/        /*回调函数,数据会在回调函数里面*/        mqtt_client.setCallback(new MqttCallback() {            @Override            public void connectionLost(Throwable throwable) {            }            @Override            public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {                /*数据到这了*/                final String msg = new String(mqttMessage.getPayload());                Log.d("MQTTRCV", msg);//日志信息,可以查看                System.out.println(msg);/*打印得到的数据*/                /*更新UI线程*/ /*               runOnUiThread(new Runnable() {                    @Override                    public void run() {                            *//*开始解析数据*//*                           *//*数据解析部分这里使用的是Json解析*//*                           *//*为了避免闪退,使用try来处理异常情况*//*                        try {                            JSONObject jsonObject = new JSONObject(String.valueOf(msg));                            String method = jsonObject.getString("method");                            JSONObject params = jsonObject.getJSONObject("params");                            int soilHumidity = params.getInt("soilHumidity");                            int currentTemperature = params.getInt("CurrentTemperature");                            int currentHumidity = params.getInt("CurrentHumidity");                            int n = params.getInt("N");                            int p = params.getInt("P");                            int k = params.getInt("K");                                    *//*更新数据到UI*//*                            air_temp.setText(String.valueOf(currentTemperature));                            air_humi.setText(String.valueOf(currentHumidity));                            sloi_humi.setText(String.valueOf(soilHumidity));                            soli_n.setText(String.valueOf(n));                            soil_p.setText(String.valueOf(p));                            soil_k.setText(String.valueOf(k));                                    *//*打印日志信息*//*                            Log.d("TAG", "method: " + method);                            Log.d("TAG", "soilHumidity: " + soilHumidity);                            Log.d("TAG", "currentTemperature: " + currentTemperature);                            Log.d("TAG", "currentHumidity: " + currentHumidity);                            Log.d("TAG", "N: " + n);                            Log.d("TAG", "P: " + p);                            Log.d("TAG", "K: " + k);                        }catch (JSONException e)                        {                            e.printStackTrace();                            Toast.makeText(MainActivity.this ,"数据解析异常!",Toast.LENGTH_LONG).show();                        }                    }                });*/                /*下面是带弹窗显示的代码数据已经解析完成,解开注释即可*/                runOnUiThread(new Runnable() {                    @Override                    public void run() {                        AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);                        builder.setTitle("MQTT消息");                        builder.setMessage(msg);                        builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialogInterface, int i) {                                // 点击确定按钮后的操作                             /*   开始解析数据*/                            /*    数据解析部分这里使用的是Json解析                                为了避免闪退,使用try来处理异常情况*/                                try {                                    JSONObject jsonObject = new JSONObject(String.valueOf(msg));                                    String method = jsonObject.getString("method");                                    JSONObject params = jsonObject.getJSONObject("params");                                    int soilHumidity = params.getInt("soilHumidity");                                    int currentTemperature = params.getInt("CurrentTemperature");                                    int currentHumidity = params.getInt("CurrentHumidity");                                    int n = params.getInt("N");                                    int p = params.getInt("P");                                    int k = params.getInt("K");                               /*     更新UI*/                                    air_temp.setText(String.valueOf(currentTemperature));                                    air_humi.setText(String.valueOf(currentHumidity));                                    sloi_humi.setText(String.valueOf(soilHumidity));                                    soli_n.setText(String.valueOf(n));                                    soil_p.setText(String.valueOf(p));                                    soil_k.setText(String.valueOf(k));                               /*     打印输出的信息*/                                    Log.d("TAG", "method: " + method);                                    Log.d("TAG", "soilHumidity: " + soilHumidity);                                    Log.d("TAG", "currentTemperature: " + currentTemperature);                                    Log.d("TAG", "currentHumidity: " + currentHumidity);                                    Log.d("TAG", "N: " + n);                                    Log.d("TAG", "P: " + p);                                    Log.d("TAG", "K: " + k);                                }catch (JSONException e)                                {                                    e.printStackTrace();                                    Toast.makeText(MainActivity.this ,"数据解析异常!",Toast.LENGTH_LONG).show();                                }                            }                        });                        builder.show();                    }                });            }            @Override            public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {            }        });        /*点击事件*/        test.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                PublishMessage(mqtt_pub_topic,"{\"params\":{\"我是小白,你好呀\":999 } }");            }        });    }    public void mqtt_init_Connect()    {        try {            //实例化mqtt_client,填入我们定义的serverUri和clientId,然后MemoryPersistence设置clientid的保存形式,默认为以内存保存            mqtt_client = new MqttClient(serverUri,clientId,new MemoryPersistence());            //创建并实例化一个MQTT的连接参数对象            options = new MqttConnectOptions();            //然后设置对应的参数            options.setUserName(userName);                  //设置连接的用户名            options.setPassword(passWord.toCharArray());    //设置连接的密码            options.setConnectionTimeout(30);               // 设置超时时间,单位为秒            options.setKeepAliveInterval(50);               //设置心跳,30s            options.setAutomaticReconnect(true);            //是否重连            //设置是否清空session,设置为false表示服务器会保留客户端的连接记录,设置为true表示每次连接到服务器都以新的身份连接            options.setCleanSession(false);            /*初始化成功之后就开始连接*/            connect();            Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_LONG).show();        }catch (Exception e) {            e.printStackTrace();            Toast.makeText(MainActivity.this,"失败",Toast.LENGTH_LONG).show();        }    }    public void connect(){        //连接mqtt服务器        try {            mqtt_client.connect(options);            mqtt_client.subscribe(mqtt_sub_topic);            Toast.makeText(this ,"开始建立连接.....!",Toast.LENGTH_LONG).show();        }catch (Exception e) {            e.printStackTrace();            Log.d("MQTTCon","mqtt连接失败");            Toast.makeText(this ,"mqtt连接失败!",Toast.LENGTH_LONG).show();        }    }    /*绑定各个UI控件*/    public void UI_Init()    {        air_temp  =  findViewById(R.id.air_temp); //空气温度        air_humi  =  findViewById(R.id.air_humi);//空气湿度        sloi_humi =  findViewById(R.id.sloi_humi);//土壤湿度        soli_n    =  findViewById(R.id.soli_n);//土壤含N量        soil_p    =  findViewById(R.id.soil_p);//土壤含P量        soil_k    =  findViewById(R.id.soil_k);//土壤含K量        test      =  findViewById(R.id.test);//测试按钮    }    /*发布函数!*/    private void PublishMessage(String topic,String Message2)    {        if(mqtt_client ==null || !mqtt_client.isConnected())        {            return;        }        MqttMessage message = new MqttMessage();        message.setPayload(Message2.getBytes());        try{            mqtt_client.publish(topic,message);        }catch (MqttException e)        {            e.printStackTrace();        }    }}

        End

上一篇:姑爷临门,礼仪交流全攻略,轻松应对!

下一篇:大学教室英语怎么说?