You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:57:15