我在 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/