各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信六",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧!
我们在之前介绍了Paho MQTT Client Java版本的用法,并且分享了项目中遇到的相关问题。本章回中对之前的用法做一些补充。
缓冲数据
缓冲数据是一种客户端的参数,我们最开始介绍它时只是简单地创建一个缓冲对象,该对象把数据存放在了内存中,如果想查看的话比较很不方便,也可以把缓冲数据存放在硬盘上。下面是具体的操作方法。
此外,它除了用来存放故障信息外还可以缓冲Topic中的没有传递的消息,等待Client上线时会自动把缓冲中的消息传递给Client.
mPersistence = new MemoryPersistence(); //缓冲数据存放在内存中
//临时目录地址:/data/user/0/com.xx.xx/cache,xxx是app的包名
String tmpDir = System.getProperty("java.io.tmpdir"); //缓冲数据存放在硬盘上的临时目录中
mPersistence = new MqttDefaultFilePersistence(tmpDir);
mMqttClient = new MqttClient(serverURL,mClientId,mPersistence);
关于session
我们在前面章回中介绍过它的用法,这里再次补充,因为有些看官很容易用错,下面是示例代码:
mMqttConnectOptions.setCleanSession(true); //关闭session功能
mMqttConnectOptions.setCleanSession(false); //打开session功能
比如我们想关闭服务器的session功能,那么需要把客户端连接参数的session值设定为true,有客户以为设置为false就是关闭了,其实正好相反。
还有一点需要和大家补充说明:如果把session值的设定为false,那么需要QOS的值大于0才可以,不然还是无法使用session功能。比如,客户端与服务器的连接断开后无法收到服务器发送的消息,我们称其为离线消息,如果打开session功能并且把QOS的值设定为大于0,那么等到下一次客户端与服务器连接时会自动收到服务器发送的离线消息。
监听连接状态
在实际使用时MQTT的客户端可能会与服务器断开连接,我们可以通过回调接口监听客户端与服务器的连接状态,详细如下:
mMqttCallback = new MqttCallback() {
@Override
public void connectionLost(Throwable cause) {
Log.d(TAG, "connectionLost: ");
if(cause != null ) {
Log.d(TAG, "connectionLost: exception reason: " + cause.getMessage() + " " + cause.toString());
}
}
@Override
public void messageArrived(String topic, MqttMessage message) throws Exception {
}
@Override
public void deliveryComplete(IMqttDeliveryToken token) {
}
};
上面的代码创建了一个MqttCallback
类型的对象,创建对象时重写connectionLost
()方法就可以监听到客户端与服务器的连接状态。我们可以在日志中打印出错误信息和原因,方便我们找到连接断开的原因。
看官们,关于"在Android中使用MQTT通信六"的例子咱们就介绍到这里,欲知后面还有什么例子,且听下回分解!