栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

改造2,同名不同数据类型的JSON解析

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

改造2,同名不同数据类型的JSON解析

谢谢您的建议,但我想出了一种可行的方法。这是我的方法…

首先,在我的

Pojo
课堂上,我添加了一个JsonDeserializer,然后检查“数据”是对象还是基元,并据此设置相应的字段。

public class UserResponse  {    @SerializedName("status")    private String status;    @SerializedName("data")    private Object mData;    @SerializedName("response")    private String response;    @SerializedName("error")    private String error;    private String message;    private String firstname;    private String lastname;    private String mobilenumber;    private String emailid;    private String timezone;    public String getMessage() {        return message;    }    public void setMessage(String message) {        this.message = message;    }    public String getFirstname() {        return firstname;    }    public void setFirstname(String firstname) {        this.firstname = firstname;    }    public String getLastname() {        return lastname;    }    public void setLastname(String lastname) {        this.lastname = lastname;    }    public String getMobilenumber() {        return mobilenumber;    }    public void setMobilenumber(String mobilenumber) {        this.mobilenumber = mobilenumber;    }    public String getEmailid() {        return emailid;    }    public void setEmailid(String emailid) {        this.emailid = emailid;    }    public String getTimezone() {        return timezone;    }    public void setTimezone(String timezone) {        this.timezone = timezone;    }    public String getStatus() {        return status;    }    public void setStatus(String status) {        this.status = status;    }    public Object getmData() {        return mData;    }    public String getResponse() {        return response;    }    public String getError() {        return error;    }    public static class DataStateDeserializer implements JsonDeserializer<UserResponse> {        @Override        public UserResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { UserResponse userResponse = new Gson().fromJson(json, UserResponse.class); JsonObject jsonObject = json.getAsJsonObject(); if (jsonObject.has("data")) {     JsonElement elem = jsonObject.get("data");     if (elem != null && !elem.isJsonNull()) {        if(elem.isJsonPrimitive()){        userResponse.setMessage(elem.getAsString());         }else{  userResponse.setFirstname(elem.getAsJsonObject().get("firstname").getAsString());  userResponse.setLastname(elem.getAsJsonObject().get("lastname").getAsString());  userResponse.setMobilenumber(elem.getAsJsonObject().get("mobilenumber").getAsString());  userResponse.setEmailid(elem.getAsJsonObject().get("emailid").getAsString());  userResponse.setTimezone(elem.getAsJsonObject().get("timezone").getAsString());         }     } } return userResponse ;        }    }}

然后将json解串器附加到GSON Builder的类型适配器,并像这样在Retrofit中给它创建GsonConvertor的方法

Gson gson = new GsonBuilder()      .registerTypeAdapter(UserResponse.class, new UserResponse.DataStateDeserializer())     .create();Retrofit retrofit = new Retrofit.Builder()     .baseUrl(ConstantUtils.base_URL)     .addConverterFactory(GsonConverterFactory.create(gson))     .build();UserInfoRequestInterface requestInterface = retrofit.create(UserInfoRequestInterface.class);        Call<UserResponse> call = requestInterface.getInfoUpdated(user_id, firstName, lastName, phoneNumber, email, null, null);

然后,我要做的就是检查message是否为null并相应地执行所需的操作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636731.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号