2011-12-27 53 views
2

我制作了一个在模拟器中正常工作并在我的实际设备上进行调试的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输出完全不显示任何异常或堆栈跟踪。

+0

没人。除非您发布更多信息(logcat输出,最终异常等) – 2011-12-27 11:41:59

+0

logcat输出不会产生任何相关和有用的信息,我也没有任何例外。我完全意识到这个问题是模糊的,如果有例外情况会更容易弄清楚。令我困扰的是,显然它与签署vs调试有关,我认为也许其他人遇到过类似的问题。 – Eivind 2011-12-27 12:03:16

回答

3

只要有可能就用调试输出激活代码。这会给你更多的见解。 我怀疑问题是在签署。很可能这是你的项目/构建配置。一个可能的原因可能是使用proguard(这是工具链)混淆 - 这会影响你的命名策略。

+1

ProGuard是罪魁祸首。谢谢。 :-) – Eivind 2011-12-27 13:28:01

+0

你做了什么来解决?我得到类似的问题...看到我的问题: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

+0

基于Proguard和反射的工具混合不好。常见的解决方案是将您的域类从proguard处理中排除。 – 2015-05-18 06:53:40

相关问题