Android用Gson
解析字段的时候,后台返回的字段类型不一致引起闪退,例如:我的是字段是long
类型的,但是后台数据为空的时候直接返回空串,这个时候Gson
解析就会崩溃,解决判断就是自定义序列化。新建类TTSGson
,
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
import com.google.gson.JsonSyntaxException;
import java.lang.reflect.Type;
class InterDefault0Adapter implements JsonSerializer<Integer>,JsonDeserializer<Integer>{
@Override
public JsonElement serialize(Integer src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
@Override
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {//定义为int类型,如果后台返回""或者null,则返回0
return 0;
}
} catch (Exception ignore) {
}
try {
return json.getAsInt();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
}
class LongDefault0Adapter implements JsonDeserializer<Long>, JsonSerializer<Long> {
@Override
public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
{
try {
if (json.getAsString().equals("") || json.getAsString().equals("null")) {//定义为long类型,如果后台返回""或者null,则返回0
return 0l;
}
} catch (Exception ignore) {
}
try {
return json.getAsLong();
} catch (NumberFormatException e) {
throw new JsonSyntaxException(e);
}
}
@Override
public JsonElement serialize(Long src, Type typeOfSrc, JsonSerializationContext context) {
return new JsonPrimitive(src);
}
}
public class TTSGson {
/**
* 增加后台返回""和"null"的处理
* 1.int=>0
* 2.double=>0.00
* 3.long=>0L
*
* @return
*/
public static Gson buildGson() {
Gson gson =new GsonBuilder()
.registerTypeAdapter(Long.class,new LongDefault0Adapter())
.registerTypeAdapter(long.class,new LongDefault0Adapter())
.registerTypeAdapter(Integer.class,new InterDefault0Adapter())
.registerTypeAdapter(int.class,new InterDefault0Adapter())
.create();
return gson;
}
}
使用的时候时候
CommonModel<OrderDetailModel> commonModel = TTSGson.buildGson().fromJson(data.toString(),type);