我正在使用改造来解析API,但是它给出了onFailure的响应。我尝试了所有可能的解决方案,但结果仍然相同。 我的Api如下所示:
{
"status": 200,
"data": [
{
"club_id": 1,
"club_name": "XYZ",
"member_info": {
"title": "ABC",
"image": "",
"position": "",
"description": null,
"email": "unknown @gmail.com",
"landline": "000000",
"mobile": "00000000",
"website": "unknown",
"address": "unknown",
"blood_group": "unknown blood_group"
}
} // edited ( "}" was missing)
]
}
我的Model类如下:
public class SerialDTO{
@SerializedName("data")
private ArrayList<SerialData> data;
public ArrayList<SerialData> getData() {
return data;
}
public void setData(ArrayList<SerialData> data) {
this.data = data;
}
}
然后我按如下方式实现了数据成员:
public class SerialData implements Parcelable {
@SerializedName("club_id")
String club_id;
@SerializedName("club_name")
String club_name;
@SerializedName("member_info")
private ArrayList<Serial> serial;
public String getClub_id() {
return club_id;
}
public void setClub_id(String club_id) {
this.club_id = club_id;
}
public String getClub_name() {
return club_name;
}
public void setClub_name(String club_name) {
this.club_name = club_name;
}
public ArrayList<Serial> getSerial() {
return serial;
}
public void setSerial(ArrayList<Serial> serial) {
this.serial = serial;
}
protected SerialData(Parcel in) {
club_id = in.readString();
club_name = in.readString();
serial = in.createTypedArrayList(Serial.CREATOR);
}
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(club_id);
dest.writeString(club_name);
dest.writeTypedList(serial);
}
@Override
public int describeContents() {
return 0;
}
public static final Creator<SerialData> CREATOR = new Creator<SerialData>() {
@Override
public SerialData createFromParcel(Parcel in) {
return new SerialData(in);
}
@Override
public SerialData[] newArray(int size) {
return new SerialData[size];
}
};
}
我的会员信息DTO如下:
public class Serial implements Parcelable {
@SerializedName("title")
String title;
@SerializedName("image")
String image;
@SerializedName("position")
String position;
@SerializedName("description")
String description;
@SerializedName("email")
String email;
@SerializedName("landline")
String landline;
@SerializedName("mobile")
String mobile;
@SerializedName("website")
String website;
@SerializedName("address")
String address;
@SerializedName("blood_group")
String bloodGroup;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLandline() {
return landline;
}
public void setLandline(String landline) {
this.landline = landline;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBloodGroup() {
return bloodGroup;
}
public void setBloodGroup(String bloodGroup) {
this.bloodGroup = bloodGroup;
}
protected Serial(Parcel in) {
title = in.readString();
image = in.readString();
position = in.readString();
description = in.readString();
email = in.readString();
landline = in.readString();
mobile = in.readString();
website = in.readString();
address = in.readString();
bloodGroup = in.readString();
}
public static final Creator<Serial> CREATOR = new Creator<Serial>() {
@Override
public Serial createFromParcel(Parcel in) {
return new Serial(in);
}
@Override
public Serial[] newArray(int size) {
return new Serial[size];
}
};
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel, int i) {
parcel.writeString(title);
parcel.writeString(image);
parcel.writeString(position);
parcel.writeString(description);
parcel.writeString(email);
parcel.writeString(landline);
parcel.writeString(mobile);
parcel.writeString(website);
parcel.writeString(address);
parcel.writeString(bloodGroup);
}
}
我的Api界面:
public interface MembersApi {
@GET("api/family_tree")
Call<SerialDTO> getMyJSON();
}
我实现了如下的API解析:
private void fetchMember() {
MembersApi service = new RetrofitApiClient(getApplicationContext()).createService(MembersApi.class);
Call<SerialDTO> call = service.getMyJSON();
call.enqueue(new Callback<SerialDTO>() {
@Override
public void onResponse(Call<SerialDTO> call, Response<SerialDTO> response) {
if (response.isSuccessful()) {
SerialDTO RealResponse=new SerialDTO();
ArrayList<SerialData> data=new ArrayList<>();
RealResponse = response.body();
data = RealResponse.getData();
initGridView();
}
}
@Override
public void onFailure(Call<SerialDTO> call, Throwable t) {
Log.d("TAG", "Failure" + t);
}
});
}
答案 0 :(得分:1)
用于任何与json相关的事情。 此外,您发布的json也缺少“}”花括号。
通常,您的数据模型类应该是这样的:
public class Datum {
@SerializedName("club_id")
@Expose
private Integer clubId;
@SerializedName("club_name")
@Expose
private String clubName;
@SerializedName("member_info")
@Expose
private MemberInfo memberInfo;
public Integer getClubId() {
return clubId;
}
public void setClubId(Integer clubId) {
this.clubId = clubId;
}
public String getClubName() {
return clubName;
}
public void setClubName(String clubName) {
this.clubName = clubName;
}
public MemberInfo getMemberInfo() {
return memberInfo;
}
public void setMemberInfo(MemberInfo memberInfo) {
this.memberInfo = memberInfo;
}
}
2。
public class Example {
@SerializedName("status")
@Expose
private Integer status;
@SerializedName("data")
@Expose
private List<Datum> data = null;
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public List<Datum> getData() {
return data;
}
public void setData(List<Datum> data) {
this.data = data;
}
}
3。
public class MemberInfo {
@SerializedName("title")
@Expose
private String title;
@SerializedName("image")
@Expose
private String image;
@SerializedName("position")
@Expose
private String position;
@SerializedName("description")
@Expose
private Object description;
@SerializedName("email")
@Expose
private String email;
@SerializedName("landline")
@Expose
private String landline;
@SerializedName("mobile")
@Expose
private String mobile;
@SerializedName("website")
@Expose
private String website;
@SerializedName("address")
@Expose
private String address;
@SerializedName("blood_group")
@Expose
private String bloodGroup;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getImage() {
return image;
}
public void setImage(String image) {
this.image = image;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public Object getDescription() {
return description;
}
public void setDescription(Object description) {
this.description = description;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getLandline() {
return landline;
}
public void setLandline(String landline) {
this.landline = landline;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getWebsite() {
return website;
}
public void setWebsite(String website) {
this.website = website;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getBloodGroup() {
return bloodGroup;
}
public void setBloodGroup(String bloodGroup) {
this.bloodGroup = bloodGroup;
}
}
答案 1 :(得分:1)
你不是想念护腕吗?
{
"status": 200,
"data": [
{
"club_id": 1,
"club_name": "XYZ",
"member_info": {
"title": "ABC",
"image": "",
"position": "",
"description": null,
"email": "unknown @gmail.com",
"landline": "000000",
"mobile": "00000000",
"website": "unknown",
"address": "unknown",
"blood_group": "unknown blood_group"
}
}//here
]
}
答案 2 :(得分:0)
我解决了。我正在以数组形式获取数据。我只是按如下方式更改了SerialData类中的代码:
以前我是这样做的
@SerializedName("member_info")
private ArrayList<Serial> serial;
并通过执行以下操作解决了该问题:
@SerializedName("member_info")
private Serial serial;