某些字段本身定義為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異常。