如何在Android Studio中查看Paho MQTT客户端的JSON格式收发请求日志
如何在Android Paho MQTT中查看收发的JSON格式消息内容
Paho MQTT v3的默认日志只会输出客户端状态(连接、订阅、错误等),不会打印实际的消息JSON内容,你需要在收发消息的关键逻辑里手动添加日志打印,以下是具体实现方案:
一、在消息收发回调中直接打印JSON
1. 接收消息时打印
实现MqttCallback接口,在messageArrived方法中把消息payload转成UTF-8编码的字符串,直接打印即可;如果需要格式化JSON方便查看,可以用Gson/Jackson做格式化处理:
import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken; import org.eclipse.paho.client.mqttv3.MqttCallback; import org.eclipse.paho.client.mqttv3.MqttMessage; import android.util.Log; import java.nio.charset.StandardCharsets; public class MqttMessageCallback implements MqttCallback { private final Gson gson = new GsonBuilder().setPrettyPrinting().create(); @Override public void connectionLost(Throwable cause) { Log.d("MQTT_STATUS", "连接丢失: " + cause.getMessage()); } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { // 转成UTF-8字符串 String rawJson = new String(message.getPayload(), StandardCharsets.UTF_8); Log.d("MQTT_RECEIVE_RAW", "Topic: " + topic + ", 原始JSON: " + rawJson); // 格式化JSON(可选,更易读) try { JsonElement jsonElement = JsonParser.parseString(rawJson); String formattedJson = gson.toJson(jsonElement); Log.d("MQTT_RECEIVE_FORMATTED", "Topic: " + topic + "\n格式化后JSON:\n" + formattedJson); } catch (JsonSyntaxException e) { Log.w("MQTT_RECEIVE", "收到非JSON格式的消息: " + rawJson); } } @Override public void deliveryComplete(IMqttDeliveryToken token) { // 消息发送完成后,打印发送的内容 try { MqttMessage sentMsg = token.getMessage(); if (sentMsg != null) { String sentJson = new String(sentMsg.getPayload(), StandardCharsets.UTF_8); Log.d("MQTT_SEND_SUCCESS", "已发送JSON: " + sentJson); } } catch (Exception e) { Log.e("MQTT_SEND_ERROR", "打印发送消息失败: " + e.getMessage()); } } }
然后给MqttClient设置这个回调:
MqttClient mqttClient = new MqttClient("tcp://your-mqtt-server:1883", "client-id", new MemoryPersistence()); mqttClient.setCallback(new MqttMessageCallback());
2. 发送消息前打印
在调用publish方法发送消息前,先把要发送的JSON字符串打印出来,避免发送后才发现内容错误:
String sendJson = "{\"deviceId\":\"123\",\"data\":{\"temperature\":25.6}}"; MqttMessage message = new MqttMessage(sendJson.getBytes(StandardCharsets.UTF_8)); message.setQos(1); // 根据需求设置QoS // 发送前打印 Log.d("MQTT_SEND_PRE", "准备发送JSON: " + sendJson); mqttClient.publish("your/topic", message);
二、注意事项
- 确保消息payload确实是UTF-8编码的JSON,否则转字符串会出现乱码;
- 如果是二进制消息,不要强行转JSON,先判断消息类型;
- 调试完成后记得移除或注释这些日志,避免影响正式包性能。
内容的提问来源于stack exchange,提问作者dev.ays
相关产品推荐
相关产品推荐

