Android混淆编译时,用到gson-2.2.2.jar进行反射解析json数据时,报ClassCastException错误

在我的代码中,我使用方法是:

  

public synchronized <T> T parseJson(String json, Class<T> classOfT) throws Exception{

        T target = null;
        Gson gson = new Gson();
        target = gson.fromJson(json, classOfT);
        return target;
    }

之后在我的Activity中使用方式是:

    String addModel = JsonParse.getJsonParse().parseJson(jsonString, AddModel.class);  //其中AddModel是自己写的一个model类  //jsonString是一个本地文件,以Json格式存在 

之后一般编译没问题,但是混淆编译就会报错:

shortMsg:java.lang.ClassCastException
longMsg:java.lang.ClassCastException: com.google.gson.internal.StringMap
stackTrace:java.lang.ClassCastException: com.google.gson.internal.StringMap
at com.android.xxxx.activity.Info.c(Unknown Source)
at com.android.xxxx.activity.Info.onClick(Unknown Source)
at android.view.View.performClick(View.java:2486)
at android.view.View$PerformClick.run(View.java:9130)
at android.os.Handler.handleCallback(Handler.java:587)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3703)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
at dalvik.system.NativeStart.main(Native Method)

这是由于用到Gson的反射解析json字符串,混淆后导致Model的成员变量改变而导致成员变量名不能和json字符串对应而造成的

解决方法:

在proguard.cfg文件中

首先声明不要混淆对应的Model类

如,我用到的叫AddModel:

-keep public class com.android.chebaob.model.AddModel{
    *;
}

而且要在proguard.cfg文件最后添加:

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-keep class sun.misc.Unsafe { *; }
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class com.google.gson.examples.android.model.** { *; }

##---------------End: proguard configuration for Gson  ----------

这样就能解决问题了

Android混淆编译时,用到gson-2.2.2.jar进行反射解析json数据时,报ClassCastException错误

时间: 2024-10-11 22:15:30

Android混淆编译时,用到gson-2.2.2.jar进行反射解析json数据时,报ClassCastException错误的相关文章

我的Android进阶之旅------&gt;解决Jackson、Gson解析Json数据时,Json数据中的Key为Java关键字时解析为null的问题

1.问题描述 首先,需要解析的Json数据类似于下面的格式: { ret: 0, msg: "normal return.", news: [ { id: "NEW2016062800875700", from: "腾讯新闻客户端", qqnews_download_url: "http://inews.qq.com/m?refer=openapi_for_xiaotiancai", articletype: "1&

eval函数解析json数据时加上圆括号

如果最外层是一个{}的话,需要再增加一对圆括号, 不加圆括号会报:错误Uncaught SyntaxError: Unexpected token : 其它类似: 在函数中返回箭头函数对象时,也要加一个()比如 export default connect(()=>({"age":111}))(Demo); 主要原因是,不加圆括号,会解释为语句块. 原文地址:https://www.cnblogs.com/zhaogaojian/p/12332465.html

Android中使用Gson解析JSON数据的两种方法

Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率;本文将介绍两种方法解析JSON数据,需要的朋友可以参考下 Json是一种类似于XML的通用数据交换格式,具有比XML更高的传输效率. 从结构上看,所有的数据(data)最终都可以分解成三种类型: 第一种类型是标量(scalar),也就是一个单独的字符串(string)或数字(numbers),比如"北京"这个单独的词. 第二种类型是序列(sequence),也就是若干个相关的数据按照一定顺序并列在一起,又叫做数组

Android网络之数据解析----使用Google Gson解析Json数据

[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4063452.html 联系方式:[email protected] [正文] 文章回顾: Android网络之数据解析----SAX方式解析XML数据 一.Json数据的介绍                                                             

通过Gson解析Json数据

Json是一种数据格式,便于数据传输.存储.交换:Gson是一种组件库,可以把java对象数据转换成json数据格式. gson.jar的下载地址:http://search.maven.org/#search%7Cga%7C1%7Ca%3A%22gson%22 一.Json数据样式 为了便于理解我们先来看看Json的数据样式: 1. 单个数据对象 { "id": 100, "body": "It is my post", "numbe

JSONObject 和 GSON 解析 JSON 数据详解(转)

转载:http://www.jianshu.com/p/f99de3ec0636 点此进入:从零快速构建APP系列目录导图 点此进入:UI编程系列目录导图 点此进入:四大组件系列目录导图 点此进入:数据网络和线程系列目录导图 本节例程下载地址:WillFLowJSON 一.JSON简介 我们之前已经掌握了 XML 格式数据的解析方式,那么接下来我们要去学习一下如何解析 JSON 格式的数据,在学习之前,我们先将这两者做一个简单的比较. XML与JSON的对比: JSON和XML的数据可读性基本相

Android:解析Json数据

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,访问服务器时返回的数据常常是HTML.XML和JSON,这时我们需要去解析这些数据.JSON有两种结构.一是对象,二是数组.前者数据格式为 {key:value,key:value,...}:后者数据格式为:["java","javascript","vb",...],当然数组里面也可以是对象. 实例一:用SDK的类库来解析JSON数据,最重要的一个类是

Gson解析Json数据

在Android开发中就经常用到json解析,方便的是Google已经为我们提供了一个很棒的json解析库–gson. 以下是示例代码: /** * GSON解析JSON数据 * @author dream * */ public class TestGsonActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method

Android 网络请求json数据,解析json数据,生成对应的java bean类一步到位,快速开发

Android 网络请求一般都涉及到图片和JSON数据,怎样快速的请求网络JSON数据,解析JSON数据,并且一步生成自己想要的Java bean实体类?这个涉及到Android 开发效率的问题.由于接触Android 网络这方面比较多,自然就找到一些好的方法来快速开发Android 网络模块的相关内容,接下来就为大家揭晓 一步快速请求,解析JSON 数据生成对应的Java bean实体类的方法. 注:我们先把思路讲解下吧: 1.网络请求JSON数据代码可以自己写,当然我还是推荐使用网络上开源的