com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: ожидаемый BEGIN_ARRAY, но был BEGIN_OBJECT в пути строки 1 столбца 101 - PullRequest
0 голосов
/ 31 августа 2018

Я анализирую 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);
        }
    });

}

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Разве ты не скучал по наручу?

{
"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
  ]
}
0 голосов
/ 31 августа 2018

Я решил это. Я выбирал данные в виде массива. Я просто изменил код в классе SerialData следующим образом:

Раньше я так делал

@SerializedName("member_info")
private ArrayList<Serial> serial;

И решается так:

@SerializedName("member_info")
private Serial serial;
0 голосов
/ 31 августа 2018

Использование Этот сайт

для любых вещей, связанных с 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;
    }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...