Closed msdx closed 8 years ago
在JavaBeanDeserializer类的deserialze方法中,其中以下代码:
FieldInfo[] fieldInfoList = beanInfo.fields;
int size = fieldInfoList.length;
Object[] params = new Object[size];
for (int i = 0; i < size; ++i) {
FieldInfo fieldInfo = fieldInfoList[i];
params[i] = fieldValues.get(fieldInfo.name);
}
if (beanInfo.creatorConstructor != null) {
try {
object = beanInfo.creatorConstructor.newInstance(params);
} catch (Exception e) {
throw new JSONException("create instance error, "
+ beanInfo.creatorConstructor.toGenericString(), e);
}
} else if (beanInfo.factoryMethod != null) {
try {
object = beanInfo.factoryMethod.invoke(null, params);
} catch (Exception e) {
throw new JSONException("create factory method error, " + beanInfo.factoryMethod.toString(), e);
}
}
这里的params用于作为构造方法中的参数传入,它的值是根据前面的fieldValues
来获取的,但是如果不存在对应字段的话,它的值就为null,而如果缺少对应字段的参数为基本类型,不能为null,就导致后面的newInstance失败。在这里我认为从fieldValues
中获取值时,如果获取不到,应该判断是否为基本类型,为基本类型的话应该赋值为0或false等基本类型的值,而不是直接赋为null。
问题解决,请等待1.2.17发布吧
@wenshao 您好,请问这个问题的修复包含在了android版本了吗?
I need this fix to be included in android version.
服务端返回的JSON当中,有些字段没有返回,导致反序列化失败。以下是构造方法:
其中
location_id
和park_code
没有传时会报异常:另外,还发现,如果缺少的字段为String时能够正常创建实例,而在上面的例子中为int时创建实例失败。