我尝试解析从通知包中获取的数据:
String intervalsData = data.getString(ARG_INTERVAL, "[]");
Type intervalListType = new TypeToken<List<Interval>>() {}.getType();
List<Interval> intervalList = ConnectionUtils.dataFromString(intervalsData, intervalListType);
以下是数据示例:
"[{
\"StartDateTime\": \"0001-01-01T00:00:00\",
\"EndDateTime\": \"0001-01-01T00:00:00\",
\"Interval\": \"100000.0\"
}]"
dataFromString方法:
public static <T> T dataFromString(String json, Type type) {
Gson gson = new GsonBuilder()
.setDateFormat(Common.DateFormatKinds.ServerDateFormat.getValue())
.create();
return gson.fromJson(json, type);
}
服务器日期格式为"yyyy-MM-dd'T'HH:mm:ss"
间隔等级:
import java.util.Date;
public class Interval{
public Date StartDateTime;
public Date EndDateTime;
public double Interval;
}
当我将应用程序从android studio上传到设备时,一切正常。 但是,当我生成apk并通过hockeyapp上传时,Gson可以正确解析数组,但是Interval项中的字段为空。
答案 0 :(得分:2)
您需要为@Keep
类添加Interval
注释,因为Proguard会混淆已签名apk中的所有类,并且Gson无法将JSON解析为您的模型。
import java.util.Date;
import android.support.annotation.Keep;
@Keep
public class Interval{
public Date StartDateTime;
public Date EndDateTime;
public double Interval;
}
答案 1 :(得分:2)
将其添加到ProGuard配置规则中,以保留类名称及其公共字段:
Timedata.map( (obj) => {
...
})
使用-keep class com.acme.Interval { public <fields>; }
批注在代码级别进行处理;两种方法都有效。