我有api所有请求,如:
{
"success": "true",
"data": [],
"errors": []
}
例如:
{
"success": "true",
"data": [
{
"id": "666",
"name": "Cars",
"imgUrl": "/images/mod_catalog_prod/categories/no-image.jpg",
"descr": "",
"childRubricCount": 20
},
{
"id": "667",
"name": "Buses",
"imgUrl": "/images/mod_catalog_prod/categories/no-image.jpg",
"descr": "",
"childRubricCount": 14
}
],
"errors": []
}
此外,如果成功== true,则可以调用onResponse块,如果成功== false,则调用onFailure块,并使用来自json的错误变量的错误文本。 Api包含json响应中数据块的不同响应数据模型,我需要动态更改数据模型类。 有没有办法创造这样的东西?所有回复都对我有用。
答案 0 :(得分:2)
试试这个
在您的gradle文件中添加 compile' com.google.code.gson:gson:2.6.2' 依赖项。
获得响应jsonObject后通过
public void onRequestSuccess(JSONObject jsonObject) {
ModelItem item = new Gson().fromJson(jsonObject.toString(), ModelItem.class);
List<ModelItem.DataItem> dataItems;
List<ModelItem.ErrorItem> errorItems;
if (item.getSuccess().equalsIgnoreCase("true")) {
dataItems = item.getData();
for (int i = 0; i < dataItems.size(); i++) {
String name = dataItems.get(i).getName();
}
} else {
errorItems = item.getErrors();
for (int i = 0; i < errorItems.size(); i++) {
String name = errorItems.get(i).getErrorMsg();
}
}
}
创建Pojo类ModelItem.java
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.List;
public class ModelItem {
@SerializedName("success")
@Expose
private String success;
@SerializedName("data")
@Expose
private List<DataItem> data = new ArrayList<DataItem>();
@SerializedName("errors")
@Expose
private List<ErrorItem> errors = new ArrayList<ErrorItem>();
/**
* @return The success
*/
public String getSuccess() {
return success;
}
/**
* @param success The success
*/
public void setSuccess(String success) {
this.success = success;
}
/**
* @return The data
*/
public List<DataItem> getData() {
return data;
}
/**
* @param data The data
*/
public void setData(List<DataItem> data) {
this.data = data;
}
/**
* @return The errors
*/
public List<ErrorItem> getErrors() {
return errors;
}
/**
* @param errors The errors
*/
public void setErrors(List<ErrorItem> errors) {
this.errors = errors;
}
public class DataItem {
@SerializedName("id")
@Expose
private String id;
@SerializedName("name")
@Expose
private String name;
@SerializedName("imgUrl")
@Expose
private String imgUrl;
@SerializedName("descr")
@Expose
private String descr;
@SerializedName("childRubricCount")
@Expose
private Integer childRubricCount;
/**
* @return The id
*/
public String getId() {
return id;
}
/**
* @param id The id
*/
public void setId(String id) {
this.id = id;
}
/**
* @return The name
*/
public String getName() {
return name;
}
/**
* @param name The name
*/
public void setName(String name) {
this.name = name;
}
/**
* @return The imgUrl
*/
public String getImgUrl() {
return imgUrl;
}
/**
* @param imgUrl The imgUrl
*/
public void setImgUrl(String imgUrl) {
this.imgUrl = imgUrl;
}
/**
* @return The descr
*/
public String getDescr() {
return descr;
}
/**
* @param descr The descr
*/
public void setDescr(String descr) {
this.descr = descr;
}
/**
* @return The childRubricCount
*/
public Integer getChildRubricCount() {
return childRubricCount;
}
/**
* @param childRubricCount The childRubricCount
*/
public void setChildRubricCount(Integer childRubricCount) {
this.childRubricCount = childRubricCount;
}
}
public class ErrorItem {
@SerializedName("error_code")
@Expose
private String errorCode;
@SerializedName("error_msg")
@Expose
private String errorMsg;
/**
* @return The errorCode
*/
public String getErrorCode() {
return errorCode;
}
/**
* @param errorCode The error_code
*/
public void setErrorCode(String errorCode) {
this.errorCode = errorCode;
}
/**
* @return The errorMsg
*/
public String getErrorMsg() {
return errorMsg;
}
/**
* @param errorMsg The error_msg
*/
public void setErrorMsg(String errorMsg) {
this.errorMsg = errorMsg;
}
}
}