- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我知道以前有人问过这个问题。由于我在java和android方面的新手技能。我无法解决这个问题超过一个星期。
我和我的一个 friend 正在开发一个 android 项目,如果有一些这样的事情。
这件事最奇怪的部分是,它只发生在我从 Google Play 商店下载并测试它时。不是来自本地 android studio 安装或 Debug模式。
这可能是什么问题,或者这个返回列表是完全错误的?我的 friend 说服此代码正确返回,但从 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();
异常(exception)是
java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to com.gaurage.dto.DoServiceDto at com.gaurage.user.User_Test_Main.promiseMethod(Unknown Source)
最佳答案
对泛型类型进行序列化和反序列化
当你调用 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);
我有 Parent 类,它是子类,其中一些包含 List 类型。像这个父类一样,我有 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。
我很难在本地测试中重现相同的结果(包括 Debug模式)。
关于java - 谷歌 gson LinkedTreeMap 类转换为 myclass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32444863/
我在序列化 JSON 数据时遇到问题。 所以,我尝试使用泛型,但不知何故,当我尝试实现它时,Gson 讨厌我。我想做的就是对泛型进行基本抽象。这是我的代码: 执行泛型部分的主类: package co
我只是想从我的 Gson 对象中获取值,所以在我的“城市”对象中: 我需要从“isSelected”中获取名称“first”和 bool 值。 我刚刚写了一个新类“KeyPairBoolData”:
我尝试在 Android 应用程序中使用 REST 服务,但在序列化 ArrayList 时遇到问题: 我的 RESTful 服务返回: 我的 Android 应用程序收到: 我正在使用 Gson 库
在标准 JDK 或支持排序和插入顺序的简单独立库中是否有可用的 LinkedTreeMap 实现?我找到了 gridsim有一个 LinkedTreeMap implementation .但它似乎是
我正在使用 Retrofit 2.0 从返回 json 文本的 Web 服务读取数据,但在以下代码中响应是 LinkedTreeMap,我无法将其转换为 json: 我的界面 public inter
我有一个如下所示的 JSON 结构: { "identifier": 1045608, "scientificName": "Apis mellifera Linnaeus 1758",
我正在尝试使我的响应类通用。问题是它返回一个 com.google.gson.internal.LinkedTreeMap 类型的列表,而不是 Brewer 类型。 启动这一切的函数: List br
我最近开始研究 JSON 字符串,有人告诉我 Google 自己的库 Gson 是处理这些字符串的新潮方式。 我的理解是,JSON 字符串本质上是一张 map 。其中每个变量指向字符串中的一个值。 例
对于 java 数据处理程序,我发送格式正确的 JSON,但 Spring、Java 决定如何转换它看到的内容以及框架的组合我真的不应该去改变破坏 JSON,以便一旦我能看到它,它变成了 Linked
我知道以前有人问过这个问题。由于我在java和android方面的新手技能。我无法解决这个问题超过一个星期。 我和我的一个 friend 正在开发一个 android 项目,如果有一些这样的事情。 这
我正在尝试通过 Retrofit 检索对象列表: public interface TemplateApi { @GET("/api/templates") Observable> g
这个问题已经有答案了: 奥 git _a (13 个回答) 已关闭 3 年前。 我在从 JSON 字符串获取对象时遇到一些问题。 我得到了 Product 类 public class Product
我第一次使用 GSON 进行改造。它在静态数据上运行流畅,但在动态数据的情况下显示上述错误。在设置文本值时在适配器中显示错误 主 Activity public class MainActivity
我正在尝试读取以下 json 数据。如何使用 LinkedTreeMap 进行阅读? {"msgType": "gameInit", "data": { "race": { "track"
下面这行代码对我来说很正常: val users: Array = com.google.gson.Gson().fromJson(data, Array::class.java) 但是当我启用 Pr
我是 kotlin 新手,刚刚将我的代码从 java 迁移到 kotlin。我有一个数据类 HistoryList,用于解析来自 API 的响应。 data class HistoryList(
我正在尝试通过广播在 Intent 中传递包含 Analytics Reporting 数据的对象。问题是反序列化返回 LinkedTreeMap 而不是原始序列化对象,导致 ClassCastExc
这个问题在这里已经有了答案: Gson TypeToken with dynamic ArrayList item type (13 个回答) 关闭3年前。 我在从 JSON 字符串中获取对象时遇到了
import com.google.gson.Gson import com.google.gson.reflect.TypeToken fun main() { val jsonString
我正在使用 Retrofit+Gson 来解析 JSON。 当我尝试解析来自 Google Places API 的响应时(好吧,我不尝试解析,我只是尝试为该响应创建模型),但出现了一些错误。 这是来
我是一名优秀的程序员,十分优秀!