谷歌gson LinkedTreeMap类转换为myclass

2024-04-29

我知道这个问题以前已经被问过。由于我对java和android的新手技能。我一个多星期都无法解决这个问题。

我和我的一位朋友正在开发一个 Android 项目,其中有一些类似的事情。

最奇怪的部分是,只有当我从 Google Play 商店下载并测试它时才会发生这种情况。不是来自本地 android studio 安装或调试模式。

这里可能有什么问题,或者这个返回列表完全错误? 我的朋友确信此代码可以正确返回,但从 Play 商店安装来看,它始终是一个错误。

请建议我应该在哪里继续挖掘?

@Override
public void promiseMethod(JSONObject object) {
    if (object != null) {

        if (object.has(DO_SERVICES)) {
            vehicleDetails = new ArrayList < Object[] > (1);
            List < String > vehicleNoList = new ArrayList < String > (1);
            List < String > serviceList = new ArrayList < String > (1);
            try {
                Gson gson = new Gson();
                JSONObject jsonObj = new JSONObject(object.get(DO_SERVICES)
                    .toString());
                servDto = gson.fromJson(jsonObj.toString(),
                    ServiceDto.class);


                if (servDto.getServiceDto() instanceof List) {

                    List < DoServiceDto > doServiceList = servDto.getServiceDto();

例外的是

java.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap 无法转换为 com.gaurage.dto.DoServiceDto 在 com.gaurage.user.User_Test_Main.promiseMethod(来源未知)


序列化和反序列化泛型类型

当您调用 toJson(obj) 时,Gson 会调用 obj.getClass() 来获取要序列化的字段的信息。同样,您通常可以在 fromJson(json, MyClass.class) 方法中传递 MyClass.class 对象。如果对象是非泛型类型,则此方法可以正常工作。但是,如果对象是泛型类型,则泛型类型信息会因为 Java 类型擦除而丢失。这是一个说明这一点的例子:

class Foo<T> {  T value;}
Gson gson = new Gson();
Foo<Bar> foo = new Foo<Bar>();
gson.toJson(foo); // May not serialize foo.value correctly
gson.fromJson(json, foo.getClass()); // Fails to deserialize foo.value as Bar

上面的代码无法将 value 解释为 Bar 类型,因为 Gson 调用 list.getClass() 来获取其类信息,但此方法返回一个原始类 Foo.class。这意味着 Gson 无法知道这是一个 Foo 类型的对象,而不仅仅是普通的 Foo。

您可以通过为泛型类型指定正确的参数化类型来解决此问题。您可以使用 TypeToken 类来完成此操作。

Type fooType = new TypeToken<Foo<Bar>>() {}.getType();    
gson.toJson(foo, fooType);
gson.fromJson(json, fooType);

我有父类,它是子类,其中一些具有列表类型。像这个父类一样,我有 30 个文件。我是这样解决的。

Gson gson = new Gson();
JSONObject jsonObj = new JSONObject(object.get(DO_SERVICES).toString());
Type type = new TypeToken<MyDto>() {}.getType();
servDto = gson.fromJson(jsonObj.toString(),type);

最重要的是,我无法在 Android studio 的本地测试中重现这个错误。仅当我生成签名的 apk 并将应用程序发布到 PlayStore 时,应用程序停止,并且报告显示无法将 LinkedTreeMap 转换为 myclass,才会弹出此问题。

我很难在本地测试(包括调试模式)中重现相同的结果。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

谷歌gson LinkedTreeMap类转换为myclass 的相关文章

  • 改造2:使用json对象发送文件

    我在请求正文中发送对象 如下所示 title test description test images POST create data Call
  • Java 8 流排序字符串列表[重复]

    这个问题在这里已经有答案了 我正在流上调用排序方法 java 文档说 Sorted 方法返回一个由该流的元素组成的流 并根据自然顺序排序 但是当我运行下面的代码时 List
  • 如何修复XSS漏洞

    我们正在使用 fortify 扫描 java 源代码 它抱怨以下错误 Method abc sends unvalidated data to a web browser on line 200 which can result in th
  • Java 相当于 C# 的 async/await?

    我是一名普通的 C 开发人员 但偶尔也会使用 Java 开发应用程序 我想知道 Java 中是否有相当于 C async await 的东西 简单来说 java 相当于 async Task
  • Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzbqo()Z;或其超类(“com.google.firebase.FirebaseApp”的声明

    在我的 Android 应用程序中 编译应用程序时出现错误 我正在最新的 android studio 中工作 并使用 Firebase UI Auth 和 Firebase 数据库 所有版本在应用程序级等级文件中都相同 那么为什么我收到此
  • 在 Java/Android 中查找 UTF-8 字符串中的字符数

    我试图找出字符串以 UTF 8 存储时的长度 我尝试了以下方法 String str Charset UTF8 CHARSET Charset forName UTF 8 byte abc str getBytes UTF8 CHARSET
  • Android:iOS UIActionSheet 等效项

    我正在转换一个 iOS 应用程序 并且需要实现从 iOS 到 Android 的 UIActionSheet 的等效项 什么 UI 元素最能模仿这一点 我的目标是 Android 2 2 及更高版本 您将使用 AlertDialog 或 D
  • 如何在使用 Web 服务时获取会话对象?

    如何在使用 Web 服务时获取会话对象 服务在两个程序之间调用 如何在使用 Web 服务时获取用户会话对象 不可能使用请求对象获取会话 因为当我们谈论服务时不会有请求或响应 如果您正在与JAX WS https jax ws dev jav
  • 如果没有当前类的引用,svgLoader 无法工作

    这是我的主类 通过这个类 我通过 url 从 api 获取数据 并创建一个适配器类来维护它 但发生了意外错误 这是MainActivity java public class MainActivity extends AppCompatAc
  • 在 Repository 类中观察 Forever 是一个好习惯吗?数据库+网络分页列表

    我正在按照架构指南构建应用程序 实现了房间数据库缓存 网络 需要从单独的实体获取最新页码 我的型号 Entity tableName top rated movie page public class Top Rated Movies Pa
  • 旋转后,精灵和矩形位置在 Libgdx 中未对齐

    我有以下代码 其中紧密映射的精灵 矩形和多边形在 libgdx 中以相同角度旋转 旋转后矩形与精灵不对齐 虽然精灵在绘制时会旋转 但旋转后坐标和尺寸保持不变 矩形的情况并非如此 请参阅下面的代码和结果图 public void rotate
  • 在java中的super调用之前创建一个对象

    考虑到简单的java代码是行不通的 public class Bar extends AbstractBar private final Foo foo new Foo bar public Bar super foo 我需要在之前创建一个
  • JavaFX:在 WebView img 标签中未加载本地图像

    以下是我的代码 一切安好 我可以加载远程页面 我可以放置 HTML 内容 但我的img标签显示一个X标志表示无法加载图像 Note 我的图像与类位于同一个包中JavaFX在 Smiley 文件夹中 我可以列出所有图像 这意味着路径没有问题
  • 如何添加不确定的进度条

    我的应用程序 UI 是使用 Android 支持库构建的 但目前没有我的应用程序真正需要的 不确定的 进度条的 AppCompat 版本 我宁愿不使用任何第三方库来实现材料设计进度条 所以我想知道是否有人坐在有关为什么它不包含在支持库中的信
  • 如何在屏幕上拖动图像

    谁能帮助我如何为可以在屏幕上拖动的图像编写程序 你能给我一个示例代码吗 多谢 我怎样才能为它制作游戏得分 我将感谢您的回复 imageView setOnLongClickListener new OnLongClickListener p
  • android中使用xml的新自定义字体方法

    随着 android 发布 O 预览版 添加了一个新功能 称为xml 中的字体 它很容易实现 但我没有什么疑问 让我首先添加最好的方法1 右键单击资源文件夹并前往新建 gt Android 资源目录 新的出现资源目录窗口 2 在资源类型列表
  • 请解释*贪婪量词的工作原理

    Pattern ptn Pattern compile a Matcher mtch ptn matcher bbaac if mtch find System out println mtch group 输出 不打印任何内容 Patte
  • 设置滚动条粗细

    有没有办法调整滚动条的粗细JScrollPane 默认值有点笨拙 一个快速但又肮脏的解决方案是将宽度 高度明确设置为例如10 像素通过 jScrollPane getVerticalScrollBar setPreferredSize ne
  • 使用 Jsoup 选择没有类的 HTML 元素

    考虑一个像这样的 html 文档 div p p p p p class random class name p div 我们怎样才能选择所有p元素 但不包括p元素与random class name class Elements ps b
  • Eclipse IDE - 错误:构建路径指定执行环境 Java SE 1.7

    在 Eclipse 中 我收到一个错误 构建路径指定执行环境Java SE 1 7 工作区中没有安装与此环境严格兼容的 JRE 尝试这个 In Eclipse your project gt properties gt java build

随机推荐

  • Vue Cli 3 禁用代码分割 - 无法删除哈希文件

    我有一个vue config js设置效果很好 并取消了默认的代码分割 但它仍然输出一个 CSS 文件 其哈希值与具有好名称的 CSS 文件相同 我可以编写一个脚本来删除它 但我想知道是否有一种方法可以将文件设置为不输出带有哈希的CSS文件
  • 全局注册vue组件

    我有一个使用 vue cli 创建的 vue 应用程序 我正在创建一些组件 我想像这样使用它们
  • 为什么我无法使用 git push origin :branchname 删除远程 git 分支?

    当我尝试推送到远程 git 分支以删除它时git push origin branchname我收到以下错误消息 错误 无法推送到不合格的目的地 remotes origin branchname 目标引用规范既不匹配远程上的现有引用 也不
  • 读取Excel文件时的Pandas数据框和字符编码

    我正在阅读一个包含多个数值和分类数据的 Excel 文件 name string 列包含外语字符 当我尝试查看 name string 列的内容时 我得到了我想要的结果 但外来字符 在 Excel 电子表格中正确显示 以错误的编码显示 这是
  • 检查变量/键是否存在

    我有一位价值不同的客户 如果客户 是 则分数 10 如果客户 否 则得分 5 如果客户为空 则分数 0 对于第一个和第二个条件 我的 json 结构如下 json fields customer 1 0 3 self aaa value y
  • 如何使用带有 IF EXISTS 子查询的 SQL Select 语句?

    如何使用 IF EXISTS 语句 SQL Server 从子查询中选择布尔值 它应该是这样的 SELECT TABLE1 Id NewFiled IF EXISTS SELECT Id FROM TABLE2 WHERE TABLE2 I
  • 如何在rails 6 webpacker中添加jquery第三方插件

    我知道它很简单 但是随着 Rails 6 的更新 rails 6 中有新的语法用于管理由 webpacker 维护的 javascript 资源 application js require rails ujs start require
  • Excel VBA 模块在运行时未更新

    我有 2 个模块 主模块在运行时更新另一个模块 并在每次更新时运行该模块 问题是另一个模块在运行时似乎没有更新 它运行第一个模块 因为输出全部根据第一个输入 但运行完成后 我检查了其他模块 它已更新 但输出不符合更新的模块 我已经问过这个问
  • 使用插入符包通过controls = cforest_unbiased()运行cforest

    我想使用插入符包运行一个公正的 cforest 这可能吗 tc lt trainControl method cv number f index indexList savePredictions T classProbs TRUE sum
  • 如何识别 Antlr 语法中的行首?

    在我使用的语言中 某些关键字必须位于行的开头 这主要是因为语言中的字符串值可以跨越多行 并且字符串可以轻松包含这些关键字 我可以轻松处理旧的 yacc lex 语法实现 因为词法分析器使用普通的正则表达式来匹配文本模式 例如 descrip
  • 如何在javafx中通过事件传递参数?

    我有以下示例 我想将参数 文本 与事件一起传递 当单击按钮 bla 时 我该怎么做 EventHandler
  • Flutter / Dart 和 AWS SDK [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在考虑用 Flutter 使用 dart 编写一个移动应用程序 然而 我大量使用 AWS 无法使用他们的 SDK 会很麻烦 有什么好的方
  • 释放 Javascript 中未附加 DOM 节点使用的内存

    作为我的应用程序的一部分 我将一组小型 Dom 节点放在一起 这些节点不会一次全部显示 我将它们存储在内部数组中 用户可以调用它们的显示 在这种情况下 我将它们重新设置为用于显示它们的 div 这一切都很好 但是 当需要用新的替换所有它们时
  • 如何在 Spring Boot 中跳过将某些 @Entity 类创建为 h2(内存中)数据库中的表?

    我正在尝试构建一个使用 2 个数据源的 Spring Boot 应用程序 我现在的主要数据库是内存数据库 仅用于测试目的 其中的表是在我创建的 sql 文件的帮助下填充的 另一个数据库 oracledb 具有已填充的表 我想实现什么目标 我
  • 重命名 TensorFlow 中保存模型的变量范围

    是否可以在张量流中重命名给定模型的变量范围 例如 我根据教程创建了 MNIST 数字的逻辑回归模型 with tf variable scope my first scope NUM IMAGE PIXELS 784 NUM CLASS B
  • 有没有办法在 .Net 中创建“自托管”网站? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 类似于 WCF 自托管 有没有办法创建一个在控制台应用程序中 自托管 的网站或dll 提出这个问题的方
  • 将 void* 作为函数调用而不声明函数指针

    我已经搜索过 但找不到任何结果 我的术语可能有问题 所以如果以前有人问过这个问题 请原谅我 我想知道是否有一种简单的方法可以调用void 作为 C 中的函数 无需首先声明函数指针 然后为函数指针分配地址 IE 假设要调用的函数是类型void
  • Laravel:如何模拟依赖注入类方法

    我正在使用GitHub API https github com KnpLabs php github api通过一个Laravel API 包装器 https github com GrahamCampbell Laravel GitHu
  • 什么时候使用弱引用? [复制]

    这个问题在这里已经有答案了 我了解什么是 Java WeakReference 我想知道的是它通常用于解决哪种具体问题 有没有包含它们的模式 WeakReference and SoftReference当您想保留某些东西以备再次需要时使用
  • 谷歌gson LinkedTreeMap类转换为myclass

    我知道这个问题以前已经被问过 由于我对java和android的新手技能 我一个多星期都无法解决这个问题 我和我的一位朋友正在开发一个 Android 项目 其中有一些类似的事情 最奇怪的部分是 只有当我从 Google Play 商店下载