com.google.gson.internal.LinkedTreeMap cannot be cast to XXX

news2024/11/26 23:21:44

起因是在对google商品做本地缓存时,上线后发现的bug

刚开始非常自信,debug没问题线上有问题,大概率就是混淆文件没有添加keep,于是本地添加对SDK中类的keep,本地打包release验证,不出意外还是崩溃

仔细看崩溃的原因,关键字是com.google.gson.internal.LinkedTreeMap ,仔细想想就是gson做反序列化时无法转化为我们的类型,于是检查gson的语法,以为是两层List<List< T >>导致,去google查询按照网上的代码修改序列化和反序列化的代码还是不行。

在这里插入图片描述
最终定位原因是Google 提供的SDK中声明的List没有添加泛型!导致Gson反序列化的时候不知道转化成什么类型
在这里插入图片描述
在这里插入图片描述

因为没办法修改SDK,最终用了一种tricky的解决方案,在获取到对象的时候做个类型判断,如果是com.google.gson.internal.LinkedTreeMap类型的话就用map去取对应的字段,即map.get("XX")

另外写一个通用的Gson序列化和反序列化的代码

// 序列化   把ProductDetails换成对应的类型
kotlin.runCatching {
    Gson().toJson(it, object : TypeToken<List<ProductDetails>>() {}.type)
}
// 反序列化  把ProductDetails换成对应的类型   priceJson换成你要反序列化的对象
try {
    Gson().fromJson<List<ProductDetails>>(priceJson, object : TypeToken<List<ProductDetails>>() {}.type)
} catch (e: Exception) {
    e.throwWhenLog()
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1023547.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GEE:Bfast时间序列扰动检测

本文记录了 Google Earth Engine &#xff08;GEE&#xff09; 上 Bfast 时间序列检测的APP和gitHub链接。 文章目录 一、APP Bfast APP&#xff1a; [https://andreim.users.earthengine.app/view/bfastmonitor](https://andreim.users.earthengine.app/view/bfastmonitor)git…

C语言——通讯录管理系统

通讯录管理系统项目简介 功能说明 控制台黑窗口实现程序需要满足以下几个功能 程序开始运行时首先显示选择菜单界面&#xff0c;根据用户输入确定实现何种功能 程序界面 代码实现 多文件实现 和之前写的实战项目类似&#xff0c;这里同样采用多文件实现的方式 多文件写代码…

5G先锋开道,护航出行安全

“道路千万条&#xff0c;安全第一条”。 交通作为城市生命线“主动脉”&#xff0c;承载着助推经济发展的重要使命。构建“预、防、治”全周期交通管理&#xff0c;推进城市精细化管理刻不容缓。 为全面加强交通安全监管体系&#xff0c;天津某交管局决策对新区街道4000多个路…

计算机二级-简单应用题

题目要求 编写代码&#xff0c;以实现如下功能&#xff1a; 键盘输入小明学习的课程名称及考分等信息&#xff0c;信息间采用空格分隔&#xff0c;每个课程一行&#xff0c;空行回车结束录入&#xff0c;示例格式如下&#xff1a; 数学 90 语文 95 英语 86 物理 84 生物 87 屏幕…

(二)随机变量的数字特征:探索概率分布的关键指标

文章目录 &#x1f34b;1. 随机变量的数学期望&#x1f34b;1.1 离散型随机变量的数学期望&#x1f34b;1.2 连续型随机变量的数学期望 &#x1f34b;2. 随机变量函数的数学期望&#x1f34b;2.1 一维随机变量函数的数学期望&#x1f34b;2.2 二维随机变量函数的数学期望 &…

机器学习算法基础--逻辑回归

目录 1.数据收集及处理 2.数据提取及可视化 3.逻辑回归训练样本并且测试 4.绘制散点决策边界 逻辑回归的方法已经在数学建模里面讲过了&#xff0c;这里就不多讲了。 本篇我们主要是利用逻辑回归的方法来求解分类问题。 1.数据获取及处理 import pandas as pd from sklearn…

蓝桥杯2023年第十四届省赛真题-像素放置

目录 蓝桥杯2023年第十四届省赛真题-像素放置 题目描述 输入格式 输出格式 样例输入 样例输出 提示 【思路解析】 【代码实现】 大家觉得写得可以的话&#xff0c;可以加入QQ群907575059. 蓝桥杯2023年第十四届省赛真题-像素放置 时间限制: 3s 内存限制: 320MB 提交:…

QT--day3

2> 完成文本编辑器的保存工作 widget.cpp #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }void Widget::on_fontbtn_cl…

uniapp 实现不同用户展示不同的tabbar(底部导航栏)

一、背景 最近在做一个uniapp开发的小程序遇到一个需求&#xff0c;希望不同用户登录后展示不同的tabbar页面&#xff0c;但是uniapp项目中的pages.json是只有一个list数组的&#xff0c;并且是不能写成动态效果&#xff0c;为了实现这个需求&#xff0c;便自定义了tabbar组件 …

一文读懂SSL、TLS和mTLS的通信安全协议

今天让我们深入探讨一下SSL、TLS和mTLS等一系列重要的通信安全协议。尽管从整体系统设计的角度来看,这个主题可能并不是至关重要,但仍然值得我们深入了解。 1. SSL协议 SSL,即安全套接字层(Secure Socket Layer),是一种通信协议,旨在加密和保护互联网通信的安全性。虽…

从业二十年的测试工程师今天给大家分享postman的使用技巧以及快捷键的精髓

一、Postman是什么 Postman是chrome的一款插件,用于做接口请求测试,无论是前端,后台还是测试人员,都可以用postman来测试接口,用起来非常方便。 二、Postman安装 官网下载(FQ) Download Postman | Get Started for Free 三、Postman常用功能 安装好之后&#xff0c;我们先打开…

React(react18)中组件通信03——简单使用 Context 深层传递参数

React&#xff08;react18&#xff09;中组件通信03——简单使用 Context 深层传递参数 1. 前言1.1 React中组件通信的其他方式1.2 引出 Context 2. 简单例子3. 语法说明3.1 createContext(defaultValue)3.2 value3.3 useContext(SomeContext) 4. 总结4.1 Context4.1.1 Context…

【Java 基础篇】Java transient 关键字详解:对象序列化与非序列化字段

在 Java 编程中&#xff0c;我们经常需要将对象序列化为字节流以便于存储或传输&#xff0c;或者将字节流反序列化为对象以恢复其状态。然而&#xff0c;并不是所有对象的所有属性都应该被序列化。有些属性可能包含敏感信息&#xff0c;或者它们只在内存中有意义。在这些情况下…

每日练习-7

目录 一、选择题 二、算法题 1、两种排序方法 2、求最小公倍数 一、选择题 1、 解析&#xff1a; 指针和引用是C中两种不同的变量类型&#xff0c;它们都可以用来访问或修改其他变量的值&#xff0c;但是它们有以下几个区别&#xff1a; 引用必须在定义时初始化&#xff0c…

Terminnal will be login out after 20 second

锐捷交换机&#xff0c;命令敲着敲着 &#xff0c;就提示20秒后将中断 &#xff0c;show ip ssh 查看也一下也没有什么特殊的。 于是查看了一下VTY下的配置 absolute-timeout 5 ,这句话是什么意思呢 &#xff1f; 5分钟强制退出 &#xff01; 改进方法&#xff1a; (config)#…

为什么企业要选择使用报修工单管理系统?

报修管理系统是一种强大的工具&#xff0c;它为企业提供了一种方便、高效的方式来报告设备故障和异常情况&#xff0c;以便及时地反馈给相关的人员。这种系统不仅可以帮助企业更好地管理和跟踪设备的维护和维修工作情况&#xff0c;还可以对所有的维修信息进行统计和分析&#…

天视通等小众冷门摄像机接入安防监控系统EasyCVR平台的常见兼容问题及解决方法

众所周知&#xff0c;视频监控系统EasyCVR安防视频综合管理平台支持多类型设备、多协议方式接入&#xff0c;包括市场主流标准协议国标GB28181、RTMP、RTSP/Onvif协议等&#xff0c;以及厂家私有协议&#xff0c;如海康SDK、大华SDK、海康Ehome等。平台可兼容市面上绝大多数品牌…

【Java】类和对象知识

类和对象的基础知识 命名规则 类名统一使用大驼峰方法和成员变量统一使用小驼峰 定义一个类的时候注意的事项 1. 一般一个文件当中只定义一个类2. main方法所在的类一般要使用public修饰(注意&#xff1a;Eclipse默认会在public修饰的类中找main方法)3. public修饰的类必须…

英语——分享篇——每日100词——101-200

August——au我(谐音)gu姑(拼音)st沙滩(拼音)——八月份我和姑姑一起去沙滩 December——Dece第三(谐音)mb面包(拼音)er儿(拼音)——第三块面包是儿子在十二月买的

爬虫 — Scrapy-Redis

目录 一、背景1、数据库的发展历史2、NoSQL 和 SQL 数据库的比较 二、Redis1、特性2、作用3、应用场景4、用法5、安装及启动6、Redis 数据库简单使用7、Redis 常用五大数据类型7.1 Redis-String7.2 Redis-List (单值多value)7.3 Redis-Hash7.4 Redis-Set (不重复的)7.5 Redis-Z…