您的位置:首页 > 移动开发 > Android开发

解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题

2013-11-14 00:00 1211 查看
解决android使用gson解析json字符串,并使用混淆编译方式打包apk遇到的问题

方法一:

Gson gson = new Gson();

// 将json格式字符串转化为List<对象>

Type listType = new TypeToken<ArrayList<PersonMsgMini>>(){}.getType();

personMsgList = gson.fromJson(jsonObject.getString("list"), listType);

方法二:

public class AttendanceMsgGson

{

//字段名要跟json字符串中的key一致

private ArrayList<AttendanceMsg> list;

public ArrayList<AttendanceMsg> getList()

{

return list;

}

public void setList(ArrayList<AttendanceMsg> list)

{

this.list = list;

}

}

Gson gson = new Gson();

AttendanceMsgGson attGson = gson.fromJson(result, AttendanceMsgGson.class);

下面是重点:

说明:

其中两种gson解析json字符串的方法都没有问题,问题主要是使用了混淆编译的方式进行apk打包(其中不混淆编译进行apk打包则一切正常),因为客户端代码中的
JavaBean(实体类)的字段名称必须与服务端返回json字符串中的key要一致,才能进行解析,而混淆编

译之后,客户端代码中的JavaBean(实体类)的类名与其字段名称全部变成了a、b、c、d等等字符串,这与服务端返回的json字符串中的key不一致,导致解析失败。所以,解决的办法是:在进行混淆编译进行打包apk的时候,过滤掉存放所有JavaBean(实体类)的包不进行混淆编译。经过测试,一切正常。

在proguard.cfg文件中添加:

# removes such information by default, so configure it to keep all of it.

-keepattributes Signature

# Gson specific classes

-keep class sun.misc.Unsafe { *; }

#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson

-keep class com.google.gson.examples.android.model.** { *; }

//这句非常重要,主要是滤掉 com.bgb.scan.model包下的所有.class文件不进行混淆编译

-keep class com.bgb.scan.model.** {*;}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android gson
相关文章推荐