当 minifyEnabled 为 true 时,如何将 JSON 字符串转换为自定义对象?

Posted

技术标签:

【中文标题】当 minifyEnabled 为 true 时,如何将 JSON 字符串转换为自定义对象?【英文标题】:When minifyEnabled is true ,how to convert JSON String to Custom Object? 【发布时间】:2021-05-04 04:10:37 【问题描述】:

我的 android 应用使用 API 获取 JSON 字符串并希望将其转换为自定义对象。

当 minifyEnabled 为 false 时,它​​运行良好,但是当设置为 true 并制作 APK 时,经过一些测试我发现 Gson 无法将 JSONObject 字符串映射到我的客户对象,并且所有属性都为 null。

JSONObject obj = new JSONObject(result);// result is a string that have got from the API
Gson gson = new Gson();
String v=String.valueOf(obj);
MyObjectModel mobj= gson.fromJson(v,MyObjectModel.class);//Null Execption happen here
String t=goodMoodContentModel.getContentText();//t is null when minifyEnabled is true 

为什么会发生这种情况以及如何处理?

更新:

我用这个代码来测试它:

debug 
        minifyEnabled true
        shrinkResources false
        useProguard false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 
        'proguard-rules.pro'
    

【问题讨论】:

【参考方案1】:

您是否尝试在您的 pro-guard 规则中保留该类(-keep ETC)?

【讨论】:

你能解释一下吗?正如您在更新中看到的,useProguard =false 您的更新显示了调试配置。您提到您正在构建一个 apk,因此您应该在 build.gradle 中指定一个“发布”构建类型

以上是关于当 minifyEnabled 为 true 时,如何将 JSON 字符串转换为自定义对象?的主要内容,如果未能解决你的问题,请参考以下文章

当 minifyenabled 为 true 时,Tesseract 错误 java.lang.NoSuchFieldError

当我设置 minifyEnabled = true 时,应用程序无法使用 API

Android - 当 minifyEnabled true 导致 java.lang.ExceptionInInitializerError 时,带有混淆 AAR 库的应用程序崩溃

设置 minifyEnabled 为 true 时无法使用 GSON 解析 json 对象

如何解决此问题“在 app gradle 中 minifyEnabled 为 true 时未生成签名的 apk”

使用 Picasso 和 minifyEnabled 时应用程序崩溃 true