我从API得到响应,因为如果存在数据,那么它就是返回对象,而当数据不存在时,它就是返回空白数组.
我有用于序列化此模型的模型.
这是模特班
@Serializedname("local") public Local _local = new Local(); public class Local{ @Serializedname("total") public String _total; @Serializedname("provIDers") public ArrayList<ProvIDersDetails> _provIDers = new ArrayList<>(); public class ProvIDersDetails{ @Serializedname("ID") public String _ID; @Serializedname("image") public String _image; } @Serializedname("admin") public transIEnt admin admin = new admin(); public class admin{ @Serializedname("ID") public String _ID; @Serializedname("first_name") public String _first_name; @Serializedname("last_name") public String _last_name; } @Serializedname("orgn") public Organization _organization = new Organization(); public class Organization{ @Serializedname("name") public String _ name; } }
这是我从API获得的部分响应
"local":{ "provIDers":[ { "ID":"1180", "image":"photo.png" }, { "ID":"1180", "image":"photo.png" }, { "ID":"1180", "image":"photo.png" } ], "admin":{ "ID":"1180", "first_name":"nqgnerq", "last_name":"gnejbeqp", }, "orgn":{ "name":"organization name" } }
这是当数据不存在时我得到的另一种形式
"local":{ "total":0, "provIDers":[ ], "admin":[ ], "orgn":{ "name":"organization name" } }
我检查了许多变通方法,但都失败了,因为我想在我的pojo课堂中处理它.有任何解决办法,请提出建议.
解决方法:
您可以使用“ JsonDeserializer”进行处理.这里是一个示例.
使类ProvIDersDetails实现Serializable
创建一个这样的新类
public class ProvIDersDetailsList { public ArrayList<ProvIDersDetails> getDetails() { return provIDersDetails; } ArrayList<ProvIDersDetails> provIDersDetails= new ArrayList<>();}
现在编写反序列化器.
public class PhotoAlbumDeserializer implements JsonDeserializer { @OverrIDe public Object deserialize(JsonElement JsonElement, Type type, JsonDeserializationContext JsonDeserializationContext) throws JsonParseException { ProvIDersDetailsList provIDersDetailsList= new ProvIDersDetailsList (); JsonObject JsonObject = JsonElement.getAsJsonObject(); if (JsonObject != null) { JsonElement usersFIEld = JsonElement.getAsJsonObject().get("provIDers"); if (usersFIEld == null || usersFIEld.isJsonNull() || usersFIEld.isJsonPrimitive()) ; // if is null or is a primitive type will return an empty result else if (usersFIEld.isJsonObject()) { provIDersDetailsList.getDetails().add((ProvIDersDetails) JsonDeserializationContext.deserialize(usersFIEld, ProvIDersDetails.class)); } else if (usersFIEld.isJsonArray()) { Type listofUserType = new Typetoken<List<ProvIDersDetails>>() { }.getType(); provIDersDetailsList.getDetails().addAll((Collection<? extends ProvIDersDetails>) JsonDeserializationContext.deserialize(usersFIEld, listofUserType)); } } return provIDersDetailsList; } }
现在这样称呼它
GsonBuilder gsonBuilder = new GsonBuilder();gsonBuilder.registerTypeAdapter(ProvIDersDetailsList.class, new PhotoAlbumDeserializer());Gson gson = gsonBuilder.create();ArrayList<ProvIDersDetails> provIDersDetails = gson.fromJson(JsonString, ProvIDersDetailsList.class);
这是使用Gson https://stackoverflow.com/a/16591621/3111083做到的链接
总结以上是内存溢出为你收集整理的android-使用动态数组和对象处理gson全部内容,希望文章能够帮你解决android-使用动态数组和对象处理gson所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)