JsonObject data = { "id" : 123 }
打包签名 APK : data.getString("id") = null
eclipse 直接跑真机: data.getString("id") = “ 123 ”
为什么会有这样的区别呢?
。。。。 。。。 。。 。 坑
1
hinkal 2016-05-07 00:53:44 +08:00
你应该学会用 google “ android release apk null gson ”第一个结果 stackoverflow 就是,我提问的。 http://stackoverflow.com/questions/30001674/gson-deserialize-null-pointer-in-released-apk
|
2
hinkal 2016-05-07 00:55:22 +08:00
直接说下吧,因为代码混淆后 json 解析库中反射会失败,解决方法就是加 annotation
|
3
vik0313 OP @hinkal 这个问题再怎么 google 也不会想到 “ android release apk null gson ”,一开始是怀疑混淆的问题的,但后来觉得不大可能是混淆的原因,是因为在另一个项目,也是一样的代码,没有出现这种问题。
public static String V(JSONObject data, String key) { try { return "null".equals(data.getString(key)) ? "" : data .getString(key); } catch (Exception e) { return ""; } } 我有一个 Helper 的类写了一个这样的方法去 V, 然后就 String id = Helper.V(data, "id"),请教下这种情况怎么加 annotation 呢?谢谢! |
5
hinkal 2016-05-07 12:51:10 +08:00
是我搞错了,你用的是 org.json 的 JsonObject 啊, fastjson 也有一个同名类,你直接获取属性理论上不会出错(我试了你相同代码打包 apk 没有出错),因为都没有解析成对象,和反射没有关系。因此我就不知道为什么了。
|