132 lines
5.2 KiB
Java
132 lines
5.2 KiB
Java
package cc.winboll.studio.libappbase;
|
||
|
||
import android.util.JsonReader;
|
||
import android.util.JsonWriter;
|
||
import java.io.IOException;
|
||
|
||
/**
|
||
* @Author ZhanGSKen<zhangsken@qq.com>
|
||
* @Date 2024/08/23 15:39:07
|
||
* @Describe LogUtils 配置数据模型(继承 BaseBean,实现 JSON 序列化/反序列化)
|
||
* 封装 LogUtils 的核心配置参数(当前仅日志级别),用于配置的持久化存储与读取
|
||
*/
|
||
public class LogUtilsBean extends BaseBean {
|
||
|
||
/** 当前类的日志 TAG(用于调试输出) */
|
||
public static final String TAG = "LogUtilsBean";
|
||
|
||
/**
|
||
* 全局日志级别(默认值:Off,即不输出任何日志)
|
||
* 关联 LogUtils.LOG_LEVEL 枚举,存储日志输出的级别阈值
|
||
*/
|
||
private LogUtils.LOG_LEVEL logLevel;
|
||
|
||
/**
|
||
* 无参构造方法(默认初始化日志级别为 Off)
|
||
* 用于 JSON 反序列化时的实例创建
|
||
*/
|
||
public LogUtilsBean() {
|
||
this.logLevel = LogUtils.LOG_LEVEL.Off;
|
||
}
|
||
|
||
/**
|
||
* 有参构造方法(指定初始日志级别)
|
||
* @param logLevel 初始日志级别(如 LogUtils.LOG_LEVEL.Debug)
|
||
*/
|
||
public LogUtilsBean(LogUtils.LOG_LEVEL logLevel) {
|
||
this.logLevel = logLevel;
|
||
}
|
||
|
||
/**
|
||
* 设置日志级别(更新配置时使用)
|
||
* @param logLevel 目标日志级别
|
||
*/
|
||
public void setLogLevel(LogUtils.LOG_LEVEL logLevel) {
|
||
this.logLevel = logLevel;
|
||
}
|
||
|
||
/**
|
||
* 获取当前日志级别(读取配置时使用)
|
||
* @return 当前配置的日志级别
|
||
*/
|
||
public LogUtils.LOG_LEVEL getLogLevel() {
|
||
return logLevel;
|
||
}
|
||
|
||
/**
|
||
* 重写父类方法:获取当前类的全限定名(用于 BaseBean 反射识别)
|
||
* @return 类全限定名(如 "cc.winboll.studio.libappbase.LogUtilsBean")
|
||
*/
|
||
@Override
|
||
public String getName() {
|
||
return LogUtilsBean.class.getName();
|
||
}
|
||
|
||
/**
|
||
* 重写父类方法:将当前配置对象序列化为 JSON(持久化存储时调用)
|
||
* 序列化字段:logLevel(存储枚举的 ordinal 值,确保反序列化一致性)
|
||
* @param jsonWriter JSON 写入器(用于输出 JSON 数据)
|
||
* @throws IOException JSON 写入异常(如流关闭、格式错误)
|
||
*/
|
||
@Override
|
||
public void writeThisToJsonWriter(JsonWriter jsonWriter) throws IOException {
|
||
// 调用父类序列化逻辑(若 BaseBean 有公共字段,需优先处理)
|
||
super.writeThisToJsonWriter(jsonWriter);
|
||
// 序列化日志级别:存储枚举的索引值(如 Off=0、Error=1...),比存储名称更高效
|
||
jsonWriter.name("logLevel").value(this.getLogLevel().ordinal());
|
||
}
|
||
|
||
/**
|
||
* 重写父类方法:从 JSON 字段初始化当前对象(读取配置时调用)
|
||
* 解析字段:logLevel(通过索引值恢复 LogUtils.LOG_LEVEL 枚举)
|
||
* @param jsonReader JSON 读取器(用于读取 JSON 数据)
|
||
* @param name JSON 字段名(当前解析的字段)
|
||
* @return true:字段解析成功;false:字段不匹配(需父类处理或跳过)
|
||
* @throws IOException JSON 读取异常(如字段类型不匹配、流中断)
|
||
*/
|
||
@Override
|
||
public boolean initObjectsFromJsonReader(JsonReader jsonReader, String name) throws IOException {
|
||
// 先让父类处理公共字段,处理成功则直接返回
|
||
if (super.initObjectsFromJsonReader(jsonReader, name)) {
|
||
return true;
|
||
}
|
||
// 解析当前类专属字段
|
||
if ("logLevel".equals(name)) {
|
||
// 通过枚举索引值恢复枚举实例(确保与序列化时的 ordinal 对应)
|
||
int levelOrdinal = jsonReader.nextInt();
|
||
this.setLogLevel(LogUtils.LOG_LEVEL.values()[levelOrdinal]);
|
||
} else {
|
||
// 字段不匹配,返回 false 表示需要跳过该字段
|
||
return false;
|
||
}
|
||
// 字段解析成功
|
||
return true;
|
||
}
|
||
|
||
/**
|
||
* 重写父类方法:从 JSON 读取器完整解析配置对象(入口方法)
|
||
* 负责 JSON 对象的开始/结束解析,遍历所有字段并调用 initObjectsFromJsonReader 处理
|
||
* @param jsonReader JSON 读取器(传入待解析的 JSON 流)
|
||
* @return 解析后的当前 LogUtilsBean 实例(支持链式调用)
|
||
* @throws IOException JSON 解析异常(如格式错误、字段缺失)
|
||
*/
|
||
@Override
|
||
public BaseBean readBeanFromJsonReader(JsonReader jsonReader) throws IOException {
|
||
// 开始解析 JSON 对象(必须与 writeThisToJsonWriter 中的结构对应)
|
||
jsonReader.beginObject();
|
||
// 遍历 JSON 中的所有字段
|
||
while (jsonReader.hasNext()) {
|
||
String fieldName = jsonReader.nextName();
|
||
// 解析字段,若字段不匹配则跳过该值(避免解析失败)
|
||
if (!this.initObjectsFromJsonReader(jsonReader, fieldName)) {
|
||
jsonReader.skipValue();
|
||
}
|
||
}
|
||
// 结束 JSON 对象解析(必须调用,否则会导致流异常)
|
||
jsonReader.endObject();
|
||
// 返回当前实例,支持链式调用(如 new LogUtilsBean().readBeanFromJsonReader(reader))
|
||
return this;
|
||
}
|
||
}
|
||
|