2011-12-27 49 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

相關問題