某些字段本身定义为Jsonarray或者JsonObject 但是服务端在没有数据的时候偶尔会返回“”,这样必然就会报类似下面的异常
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_OBJECT but was STRING at line 1 column 102 path $.data.avatar_url
解决方案其实来源与你真的会用Gson吗?Gson使用指南(四)以及 Retrofit+RxJava实战日志(4)-Gson解析空字符串的问题
个人认为对于整个项目而言。需要做一些通用处理,使用@JsonAdapter注解确实是很方便的,于是对于list的处理参照第二篇文章,而对于实体类映射的返回为“”的处理参考于第一种,稍作改写
private static final java.lang.String TYPE_NAME_PREFIX = "class ";
if (json.isJsonObject()){
Gson mGson=new Gson();
return mGson.fromJson(json,typeOfT);
}else {
String className = typeOfT.toString();
if (className.startsWith(TYPE_NAME_PREFIX)) {
className = className.substring(TYPE_NAME_PREFIX.length());
}
try {
return Class.forName(className).newInstance();
} catch (InstantiationException mE) {
mE.printStackTrace();
} catch (IllegalAccessException mE) {
mE.printStackTrace();
} catch (ClassNotFoundException mE) {
mE.printStackTrace();
}
}
return null;
在需要的时候使用注解标识,至少尽量保证少出现Gson异常。