joh*_*ann 0 android json proguard gson
我的proguard和Gson库有问题.我的代码是
AdServerResult result = (AdServerResult) new Gson().fromJson(json,
AdServerResult.class);
Run Code Online (Sandbox Code Playgroud)
(我AdServerResult使用Gson库创建一个新对象)
我的AdServerResult班级:
public class AdServerResult {
public ArrayList<AdServerObject> shorts ;
public ArrayList<AdServerObject> longs ;
public ArrayList<AdServerObject> getShorts() {
return shorts;
}
public void setShorts(ArrayList<AdServerObject> shorts) {
this.shorts = shorts;
}
public ArrayList<AdServerObject> getLongs() {
return longs;
}
public void setLongs(ArrayList<AdServerObject> longs) {
this.longs = longs;
}
//for debug
@Override
public String toString(){
StringBuilder sb = new StringBuilder() ;
if (shorts!=null && shorts.size()>0){
for (AdServerObject s: shorts){
sb.append("url: "+s.getPicture_url());
}
}
if (longs!=null && longs.size()>0){
for (AdServerObject s: longs){
sb.append("url: "+s.getPicture_url());
}
}
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
我AdServerObject(在AdServerResult课堂上):
public class AdServerObject{
public String appli_id;
public String picture_url;
public String getAppli_id() {
return appli_id;
}
public void setAppli_id(String appli_id) {
this.appli_id = appli_id;
}
public String getPicture_url() {
return picture_url;
}
public void setPicture_url(String picture_url) {
this.picture_url = picture_url;
}
}
Run Code Online (Sandbox Code Playgroud)
我的"json"字符串如下:
{
"shorts": [
{ "appli_id": "282", "picture_url": "xxxx"},
{ "appli_id": "275", "picture_url": "xxx" }
],
"longs": [
{"appli_id": "MyAppli3", "picture_url": "xxxxx"},
{"appli_id": "MyAppli4", "picture_url": "xxxxx" }
]
}
Run Code Online (Sandbox Code Playgroud)
此代码有效但在使用proguard导出时,AdServerResult实例为null.
我的proguard文件(只有json部分):
# for gson (GSON @Expose annotation)
-keep public class com.google.gson.Gson
-keepattributes *Annotation*
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.stream.** { *; }
-keep class com.google.gson.examples.android.model.** { *; }
...
-keepattributes Signature
-keepattributes *Annotation*
...
-keep public class jp.xxx.ad_server.AdServerResult
-keep public class jp.xxx.ad_server.AdServerObject
-keepclassmembers class jp.xxx.ad_server.AdServerObject
-keepclassmembers class jp.xxx.ad_server.AdServerResult
Run Code Online (Sandbox Code Playgroud)
我已经使用了Gson().fromJson很多次,但我从来没有遇到过这样的问题......我正在努力解决这个问题12个小时,我的大脑即将爆炸.
- 编辑
我已经更新了proguard(4.11),但问题仍然存在.
您希望保留要序列化的类的字段及其原始名称:
-keepclassmembers class jp.xxx.ad_server.AdServerResult$AdServerObject { <fields>; }
-keepclassmembers class jp.xxx.ad_server.AdServerResult { <fields>; }
Run Code Online (Sandbox Code Playgroud)
ProGuard可能会重命名甚至删除它们.
| 归档时间: |
|
| 查看次数: |
1572 次 |
| 最近记录: |