qq_33216944
70OneDay
采纳率16.7%
2019-10-10 10:44 阅读 226

Mqqt连接错误app崩溃退出

使用Mqqt的时候出现了这个错误,造成了app崩溃退出,根据错误提示好像是在
setWill()函数出错。
java.lang.IllegalStateException
at org.eclipse.paho.client.mqttv3.MqttMessage.checkMutable(MqttMessage.java:208)
at org.eclipse.paho.client.mqttv3.MqttMessage.setRetained(MqttMessage.java:125)
at org.eclipse.paho.client.mqttv3.MqttConnectOptions.setWill(MqttConnectOptions.java:196)
at org.eclipse.paho.client.mqttv3.MqttConnectOptions.setWill(MqttConnectOptions.java:169)
at com.homsafe.mqtt.HsMqttClient.mqttClientInit(HsMqttClient.java:112)
at com.homsafe.mqtt.HsMqttClient.init(HsMqttClient.java:63)
at com.homsafe.service.WifiService$4.run(WifiService.java:733)

//我的mqqt代码
 //新建连接设置
    mqttConnectOptions = new MqttConnectOptions();
    //是否清空客户端的连接记录。若为true,则断开后,broker将自动清除该客户端连接信息 // 清除缓存
    mqttConnectOptions.setCleanSession(true); //如果不清除,一个手机对接多个设备,有疑问
    // 设置超时时间,单位:秒
    mqttConnectOptions.setConnectionTimeout(10);
    // 心跳包发送间隔,单位:秒     //即多长时间确认一次Client端是否在线
    mqttConnectOptions.setKeepAliveInterval(20);
    // 用户名
    mqttConnectOptions.setUserName(CommonData.mqttUserName);
    // 密码
    mqttConnectOptions.setPassword(CommonData.mqttPassWord.toCharArray());     //将字符串转换为字符串数组
    //断开后,是否自动连接
    mqttConnectOptions.setAutomaticReconnect(true);

    // last will message
    String message = "{\"terminal_uid\":\"" + clientId + "\"}";
    //注意:
    // MQTT本身就是为信号不稳定的网络设计的,所以难免一些客户端会无故的和Broker断开连接。
    //当客户端连接到Broker时,可以指定LWT,Broker会定期检测客户端是否有异常。
    //当客户端异常掉线时,Broker就往连接时指定的topic里推送当时指定的LWT消息。
    mqttConnectOptions.setWill(revTopic, message.getBytes(), 0, false);

    connect();

根据错误提示一步步找打了MqttMessage类中的图片说明

然后又找到了图片说明

最后找到了这个mutable变量,可是我也不知道为什么会抛出这个错误,是我照的方向不对吗图片说明
到这里我就不知道哪里错了,还请大神可以给我指点指点

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

相关推荐