java - 发布将 json 转换为列表时的构建问题

标签 java android json

我在 main/assets 文件夹中有一个 json 文件 -

[
  {
    "topic": "Studies",
    "subMessage": "....",
    "people": [
      ....
    ]
  },
  {
    "topic": "....",
    "subMessage": "...",
    "people": []
  }
]

我在下面使用这个方法来解析json并返回我的自定义列表-

final List<MyList> readJson() {
        try {
            InputStream raw = context.getAssets().open(context.getResources().getString(R.string.read_the_json)); 
            Reader reader = new InputStreamReader(raw, "UTF-8);
            return new Gson().fromJson(reader, new TypeToken<List<MyList>>() {
            }.getType());
        } catch (Exception e) {
            Log.e(TAG, "Error : " + e.getMessage());
            return null;
        }
    }

对于发布版本,我设置了 minifyEnabled true。但对于调试版本,它是错误的。

我发现,如果我在发布版本中将 minifyEnabled 设置为 false,它会起作用,但我需要 proguard 才能发布版本。

问题是在 Release build 中,方法返回 [][]。但在调试构建中,该方法返回 JSON 中的值。

可能是什么问题?

最佳答案

发生这种情况是因为 proguard 工具修改了您的类。您需要阻止混淆器混淆模型类。

不太好但最简单的方法:

  • 让所有模型类(例如 MyList)实现接口(interface) Serializable

  • 然后在文件 proguard-rules.pro 中,添加以下行:

    -keepclassmembers 类 * 实现 java.io.Serializable { *; }

更好的方法:

  • 直接将您的模型类包含在文件 proguard-rules.pro 文件中。例如。

    -keepclassmembers class com.example.MyList { *; }

关于java - 发布将 json 转换为列表时的构建问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50256959/

相关文章:

javascript - API中如何从Json数据中抓取数据

java - System.out.print(Math.pow( 9 , 1/3)) ;结果=1.0;为什么?

Android Bundle 空指针

android - 如何查询本地PC的sdp记录?

iphone - 如何转换JSON查询?

javascript - 将 .js 文件中的数据转换为 json

java - 如何使用wsdl2java创建Java代码?

java - 相对于图像中心旋转图像

java - CopiesList.addAll 方法抛出 UnsupportedOperationException

android - 如何使用 OpenCV 4 Android 在普通(例如白色)背景上检测彩色对象的位置?