diff --git a/app/src/main/res/layout/activity_password_login.xml b/app/src/main/res/layout/activity_password_login.xml index c353195..854d020 100644 --- a/app/src/main/res/layout/activity_password_login.xml +++ b/app/src/main/res/layout/activity_password_login.xml @@ -260,8 +260,7 @@ android:id="@+id/iv_login_bg" android:layout_width="match_parent" android:layout_height="@dimen/dp_42" - android:src="@drawable/theme_bg" - /> + android:src="@drawable/theme_bg" /> 0) { + log.append("请求体:\n"); + + // 复制请求体(避免原请求体被消耗) + Buffer buffer = new Buffer(); + requestBody.writeTo(buffer); + Charset charset = UTF8; + MediaType contentType = requestBody.contentType(); + if (contentType != null) { + charset = contentType.charset(UTF8); + } + + // 读取请求体内容 + String body = buffer.readString(charset); + // 格式化JSON(如果是JSON类型) + if (isJson(contentType)) { + body = formatJson(body); + } + // 截断过长的日志 + log.append(truncateLog(body)).append("\n"); + } + } + + log.append("==================== 请求结束 ====================\n"); + Log.d(TAG, log.toString()); + } catch (Exception e) { + Log.e(TAG, "打印请求日志失败: " + e.getMessage()); + } + } + + /** + * 打印响应日志 + */ + private void logResponse(Response response, long tookMs) { + try { + StringBuilder log = new StringBuilder(); + log.append("\n==================== 响应开始 ====================\n"); + + // 响应行: 状态码 + 消息 + 耗时 + log.append(String.format("状态码: %d 消息: %s 耗时: %dms\n", + response.code(), response.message(), tookMs)); + + // 响应头 + log.append("响应头:\n"); + for (String name : response.headers().names()) { + log.append(String.format(" %s: %s\n", name, response.headers().get(name))); + } + + // 响应体 + if (logResponseBody && HttpHeaders.hasBody(response)) { + ResponseBody responseBody = response.body(); + if (responseBody != null) { + BufferedSource source = responseBody.source(); + source.request(Long.MAX_VALUE); // 读取整个响应体 + Buffer buffer = source.buffer(); + + Charset charset = UTF8; + MediaType contentType = responseBody.contentType(); + if (contentType != null) { + charset = contentType.charset(UTF8); + } + + // 读取响应体内容 + String body = buffer.clone().readString(charset); + // 格式化JSON + if (isJson(contentType)) { + body = formatJson(body); + } + // 截断过长的日志 + log.append("响应体:\n").append(truncateLog(body)).append("\n"); + } + } + + log.append("==================== 响应结束 ====================\n"); + Log.d(TAG, log.toString()); + } catch (Exception e) { + Log.e(TAG, "打印响应日志失败: " + e.getMessage()); + } + } + + /** + * 判断是否为JSON类型 + */ + private boolean isJson(MediaType mediaType) { + if (mediaType == null) return false; + return mediaType.type().equals("application") && + mediaType.subtype().equals("json"); + } + + /** + * 格式化JSON字符串(增强可读性) + */ + private String formatJson(String json) { + try { + // 简单格式化(可根据需要使用更复杂的JSON格式化库) + StringBuilder formatted = new StringBuilder(); + int indent = 0; + boolean inQuotes = false; + char lastChar = ' '; + + for (char c : json.toCharArray()) { + if (c == '"' && lastChar != '\\') { + inQuotes = !inQuotes; + } + + if (!inQuotes) { + switch (c) { + case '{': + case '[': + formatted.append(c).append("\n"); + indent += 4; + formatted.append(" ".repeat(indent)); + break; + case '}': + case ']': + formatted.append("\n"); + indent -= 4; + formatted.append(" ".repeat(indent)).append(c); + break; + case ',': + formatted.append(c).append("\n").append(" ".repeat(indent)); + break; + case ':': + formatted.append(" : "); + break; + default: + formatted.append(c); + break; + } + } else { + formatted.append(c); + } + lastChar = c; + } + return formatted.toString(); + } catch (Exception e) { + // 格式化失败时返回原始字符串 + return json; + } + } + + /** + * 截断过长的日志 + */ + private String truncateLog(String log) { + if (log.length() <= maxLogLength) { + return log; + } + return log.substring(0, maxLogLength) + "\n...[日志过长,已截断]..."; + } + + /** + * 判断是否为敏感头信息(需要脱敏) + */ + private boolean isSensitiveHeader(String headerName) { + String lowerHeader = headerName.toLowerCase(); + return lowerHeader.contains("authorization") || + lowerHeader.contains("cookie") || + lowerHeader.contains("token") || + lowerHeader.contains("secret"); + } +} diff --git a/moduleUtil/src/main/res/mipmap-xxxhdpi/firsh_bj.webp b/moduleUtil/src/main/res/mipmap-xxxhdpi/firsh_bj.webp deleted file mode 100644 index b41481d..0000000 Binary files a/moduleUtil/src/main/res/mipmap-xxxhdpi/firsh_bj.webp and /dev/null differ diff --git a/moduleroom/src/main/res/layout/fragment_room_auction.xml b/moduleroom/src/main/res/layout/fragment_room_auction.xml index 3ef2b53..6145c18 100644 --- a/moduleroom/src/main/res/layout/fragment_room_auction.xml +++ b/moduleroom/src/main/res/layout/fragment_room_auction.xml @@ -173,6 +173,7 @@