将 ArrayList<Custom> 转换为 Java Android 中的 gson
Convert ArrayList<Custom> to gson in Java Android
下午好。
我不明白为什么代码在 Google 市场上发布后不起作用。
在 android studio code
中发布之前
ArrayList<TableAccount> tableAccount = getTableAccount();
String jsonStr = new Gson().toJson(tableAccount);
结果:
Log.d(TAG, "RESULT: " + jsonStr);
RESULT: [{"name":"payment","valueFloat":0.0,"valueInt":0,"valueStr":"no"}]
但是,发帖后,我看到:
Log.d(TAG, "RESULT: " + jsonStr);
RESULT: [{"a":"payment","b":"no","c":0,"d":0.0}]
为什么会出现字母 a b c?
钥匙在哪里消失了? [“名称”、“valueFloat”、“valueInt”、“valueStr”]
显然,您为 release
构建启用了 ProGuard/R8,其混淆模式重命名了您的字段。
从这里得到的最大教训是确保在将 release
构建版本上传到 Google Play 之前对其进行测试。
要解决此问题,您可以:
- 完全关闭 ProGuard/R8,
- 保留它,但完全禁用混淆,
- 保留它,但禁用对这些特定 类 或
的混淆
- 使用
@SerializedName
注释来教 Gson 使用什么名称,而不是默认使用 Java 反射来查找字段的名称(因为混淆会重命名这些字段)
下午好。 我不明白为什么代码在 Google 市场上发布后不起作用。 在 android studio code
中发布之前ArrayList<TableAccount> tableAccount = getTableAccount();
String jsonStr = new Gson().toJson(tableAccount);
结果:
Log.d(TAG, "RESULT: " + jsonStr);
RESULT: [{"name":"payment","valueFloat":0.0,"valueInt":0,"valueStr":"no"}]
但是,发帖后,我看到:
Log.d(TAG, "RESULT: " + jsonStr);
RESULT: [{"a":"payment","b":"no","c":0,"d":0.0}]
为什么会出现字母 a b c?
钥匙在哪里消失了? [“名称”、“valueFloat”、“valueInt”、“valueStr”]
显然,您为 release
构建启用了 ProGuard/R8,其混淆模式重命名了您的字段。
从这里得到的最大教训是确保在将 release
构建版本上传到 Google Play 之前对其进行测试。
要解决此问题,您可以:
- 完全关闭 ProGuard/R8,
- 保留它,但完全禁用混淆,
- 保留它,但禁用对这些特定 类 或 的混淆
- 使用
@SerializedName
注释来教 Gson 使用什么名称,而不是默认使用 Java 反射来查找字段的名称(因为混淆会重命名这些字段)