MQTT项目完成总结笔记

来源:互联网 发布:淘客发单软件 编辑:程序博客网 时间:2024/05/17 23:13

完成项目期间遇到很多问题,特此作笔记:

1、安卓只能识别128以下得数,若128以上的数则需将其强转为Byte即(Byte)0xAA

2、解决485传输数据异常问题:因输入输出模式之间切换过快,导致数据传输异常

解决办法:添加delay函数

private void delay(int ms) {try {Thread.currentThread();Thread.sleep(ms);} catch (InterruptedException e) {e.printStackTrace();}}

3、解决在检验校验位时直接相加判断是否与最后一位相等,在安卓中不可用。因为16进制加起来超过了byte量程所以将其  &0xff  即可。

4、解决使用string.format( , )可实现动态数组 例:

String humi = String.format("温度:%d℃\n湿度:%d%%", temp_number, wet_number);

5、关于base64解码问题,当从服务器得到数据进行第一次Base64解码后 得到的Json数据中的payload依然是Base64编码的。所以需要对Json数据进行处理,并进行二次解码。

源码如下

com.alibaba.fastjson.JSONObject jobj=com.alibaba.fastjson.JSON.parseObject(getFromBASE64(popMsg.getMessageBodyAsRawString()));//解码源码    String payload=jobj.get("payload").toString();//提取payload中的数据    System.out.println("Message  "+getFromBASE64(payload));//打印并解码
6、关于MQTT线程问题。需要在Activity中的onDestory()中:
transporter.sampleClient.disconnect();
7、关于MQTT应用运行过程中,断开设备网络连接,程序停止工作。并报错channel is unrecoverably broken and will  be disposed!
则需将MQTT中的set.Qos(1)修改为set.Qos(0);

0 0