From ce88de4891b87c3b7b2750575e15d6e48d518852 Mon Sep 17 00:00:00 2001 From: hxb <hxb@hdlchina.com.cn> Date: 星期四, 24 十月 2024 10:39:12 +0800 Subject: [PATCH] 增加云端库 --- HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/template/GsonUtils.java | 243 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 243 insertions(+), 0 deletions(-) diff --git a/HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/template/GsonUtils.java b/HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/template/GsonUtils.java new file mode 100644 index 0000000..80d83e0 --- /dev/null +++ b/HDLLinkPMSdk/src/main/java/com/hdl/linkpm/sdk/template/GsonUtils.java @@ -0,0 +1,243 @@ +package com.hdl.linkpm.sdk.template; + +import androidx.annotation.NonNull; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonDeserializationContext; +import com.google.gson.JsonDeserializer; +import com.google.gson.JsonElement; +import com.google.gson.JsonParseException; +import com.google.gson.JsonPrimitive; +import com.google.gson.JsonSerializationContext; +import com.google.gson.JsonSerializer; +import com.google.gson.JsonSyntaxException; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonToken; +import com.google.gson.stream.JsonWriter; + +import java.io.IOException; +import java.lang.reflect.Type; + +/** + * Created by Tong on 2021/11/10. + */ +public class GsonUtils { + + private static Gson gson; + + public static <T> T copy(Object o, Class<T> type) { + return copy(o, TypeToken.get(type)); + } + + public static <T> T copy(Object o, TypeToken<T> type) { + return copy(o, type.getType()); + } + + public static <T> T copy(Object o, Type type) { + try { + Gson gson = getGson(); + return gson.fromJson(gson.toJson(o), type); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static <T> T fromJson(String json, Type type) { + try { + Gson gson = getGson(); + return gson.fromJson(json, type); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static <T> T fromJson(String json, Class<T> type) { + try { + Gson gson = getGson(); + return gson.fromJson(json, type); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static <T> T fromJson(String json) { + try { + Gson gson = getGson(); + return gson.fromJson(json, new TypeToken<T>() { + }.getType()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static String toJson(Object object) { + try { + return getGson().toJson(object); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + public static JsonArray toJsonArray(Object object) { + try { + return GsonUtils.fromJson(GsonUtils.toJson(object), new TypeToken<JsonArray>() { + }.getType()); + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + + public static Type getType(@NonNull final Type rawType, @NonNull final Type... typeArguments) { + return TypeToken.getParameterized(rawType, typeArguments).getType(); + } + + + public static Gson getGson() { + if (gson == null) { + gson = new GsonBuilder() + .disableHtmlEscaping() + .registerTypeAdapterFactory(new NullStringToEmptyAdapterFactory()) + .registerTypeAdapter(String.class, new StringAdapter()) + .registerTypeAdapter(Integer.class, new IntegerDefaultAdapter()) + .registerTypeAdapter(Double.class, new DoubleDefaultAdapter()) + .registerTypeAdapter(Long.class, new LongDefaultAdapter()) + .create(); + } + return gson; + } + + private static class StringAdapter implements JsonSerializer<String>, JsonDeserializer<String> { + @Override + public String deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + if (json instanceof JsonPrimitive) { + return json.getAsString(); + } else { + return json.toString(); + } + } + + @Override + public JsonElement serialize(String src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + + private static class IntegerDefaultAdapter implements JsonSerializer<Integer>, JsonDeserializer<Integer> { + @Override + public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + try { + if (json.getAsString().equals("") || json.getAsString().equals("null")) { + return 0; + } + } catch (Exception ignore) { + } + try { + return json.getAsInt(); + } catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + private static class DoubleDefaultAdapter implements JsonSerializer<Double>, JsonDeserializer<Double> { + @Override + public Double deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + try { + if (json.getAsString().equals("") || json.getAsString().equals("null")) { + return 0.00; + } + } catch (Exception ignore) { + } + try { + return json.getAsDouble(); + } catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public JsonElement serialize(Double src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + private static class LongDefaultAdapter implements JsonSerializer<Long>, JsonDeserializer<Long> { + @Override + public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) + throws JsonParseException { + try { + if (json.getAsString().equals("") || json.getAsString().equals("null")) { + return 0L; + } + } catch (Exception ignore) { + } + try { + return json.getAsLong(); + } catch (NumberFormatException e) { + throw new JsonSyntaxException(e); + } + } + + @Override + public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) { + return new JsonPrimitive(src); + } + } + + private static class NullStringToEmptyAdapterFactory implements TypeAdapterFactory { + + public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { + Class<T> rawType = (Class<T>) type.getRawType(); + if (rawType != String.class) { + return null; + } + return (TypeAdapter<T>) new StringNullAdapter(); + } + } + + public static class StringNullAdapter extends TypeAdapter<String> { + + @Override + public String read(JsonReader reader) throws IOException { + if (reader.peek() == JsonToken.NULL) { + reader.nextNull(); + return ""; + } + return reader.nextString(); + } + + @Override + public void write(JsonWriter writer, String value) throws IOException { + if (value == null) { + writer.nullValue(); + return; + } + writer.value(value); + } + + } + + +} -- Gitblit v1.8.0