与GSON的Android应用程序在调试模式下工作,但不是在运行签名apk时
我制作了一个在模拟器中正常工作并在我的实际设备上进行调试的Android应用程序。与GSON的Android应用程序在调试模式下工作,但不是在运行签名apk时
然而,在设备上运行的签署APK当我GSON反序列化不起作用。
的问题发生在这个代码:
public static void parseLanguage(String response) {
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setFieldNamingStrategy(new MyFieldNamingStrategy());
Gson gson = gsonBuilder.create();
_Helper.s = gson.fromJson(response, _Strings.class);
}
我也使用这个类:
class MyFieldNamingStrategy implements FieldNamingStrategy {
//Translates the Java field name into its JSON element name representation.
@Override
public String translateName(Field field) {
return field.getName();
}
}
我检查了名为“回应”的字符串是一个有效的JSON字符串,但_Strings.class的实际填充不起作用,并且_Strings.class中包含的所有字符串保持空白。
有没有人有任何想法,为什么会发生这种情况?它仅在运行已签名的apk时发生,并且Logcat输出完全不显示任何异常或堆栈跟踪。
只要有可能就用调试输出激活代码。这会给你更多的见解。 我怀疑问题是在签署。很可能这是你的项目/构建配置。一个可能的原因可能是使用proguard(这是工具链)混淆 - 这会影响你的命名策略。
ProGuard是罪魁祸首。谢谢。 :-) – Eivind 2011-12-27 13:28:01
你做了什么来解决?我得到类似的问题...看到我的问题:http://stackoverflow.com/questions/30290208/gson-not-creating-correctly-using-my-jsonentity-only-in-published-app-using-an – JonasOliveira 2015-05-17 18:05:29
基于Proguard和反射的工具混合不好。常见的解决方案是将您的域类从proguard处理中排除。 – 2015-05-18 06:53:40
没人。除非您发布更多信息(logcat输出,最终异常等) – 2011-12-27 11:41:59
logcat输出不会产生任何相关和有用的信息,我也没有任何例外。我完全意识到这个问题是模糊的,如果有例外情况会更容易弄清楚。令我困扰的是,显然它与签署vs调试有关,我认为也许其他人遇到过类似的问题。 – Eivind 2011-12-27 12:03:16