How Do I Retrieve Data Independently From Nested Json Objects That Are Part Of The Same Group In Android/java? ( More Clarity/details In Body)
I have a pretty common scenario, but I am stuck trying to figure out how to retrieve data from certain json objects within the same json response but returning different size of it
Solution 1:
Instead of trying to use response as it came from your API(which is causing problems), you could declare a model class that will be more friendly and perform some operations on your API response to create a list of your new model class.
Declare a new model UpcomingGuest that takes a Visitor object and a Meeting in its constructor.
publicclassUpcomingGuest {
privateString visitId;
privateString firstName;
privateString lastName;
privateString email;
privateObject phone;
privateString status;
privateString meetingId;
privateString meetingDateStart;
privateString meetingDateEnd;
publicUpcomingGuest(UpcomingGuestsList.Visitor visitor, UpcomingGuestsList.Meeting meeting){
this.visitId = visitor.getVisitId();
this.firstName = visitor.getFirstName();
this.lastName = visitor.getLastName();
this.email = visitor.getEmail();
this.phone = visitor.getPhone();
this.status = visitor.getStatus();
this.meetingId = meeting.getId();
this.meetingDateStart = meeting.getDateStart();
this.meetingDateEnd = meeting.getDateEnd();
}
publicStringgetVisitId() {
return visitId;
}
publicvoidsetVisitId(String visitId) {
this.visitId = visitId;
}
publicStringgetFirstName() {
return firstName;
}
publicvoidsetFirstName(String firstName) {
this.firstName = firstName;
}
publicStringgetLastName() {
return lastName;
}
publicvoidsetLastName(String lastName) {
this.lastName = lastName;
}
publicStringgetEmail() {
return email;
}
publicvoidsetEmail(String email) {
this.email = email;
}
publicObjectgetPhone() {
return phone;
}
publicvoidsetPhone(Object phone) {
this.phone = phone;
}
publicStringgetStatus() {
return status;
}
publicvoidsetStatus(String status) {
this.status = status;
}
publicStringgetMeetingId() {
return meetingId;
}
publicvoidsetMeetingId(String meetingId) {
this.meetingId = meetingId;
}
publicStringgetMeetingDateStart() {
return meetingDateStart;
}
publicvoidsetMeetingDateStart(String meetingDateStart) {
this.meetingDateStart = meetingDateStart;
}
publicStringgetMeetingDateEnd() {
return meetingDateEnd;
}
publicvoidsetMeetingDateEnd(String meetingDateEnd) {
this.meetingDateEnd = meetingDateEnd;
}
}
Then construct a list of UpcomingGuest from your response which will be used in your RecyclerView's adapter.
.subscribe(response -> {
int sizercount = 0;
for (UpcomingGuestsList.Meeting meeting: response.meetings) {
for(UpcomingGuestsList.Visitor visitor: meeting.visitors){
upcomingGuests.add(new UpcomingGuest(visitor,meeting));
}
}
// send upcomingGuests results to view
}
Then in your RecyclerView's adapter use a List of UpcomingGuest instead of the two Lists you are using.
privateList<UpcomingGuest> mUpcomingGuestList;
EDIT
For your sorting issue, you could sort your response before iterating through them like below:
.subscribe(response -> {
ArrayList<UpcomingGuest> upcomingGuests = newArrayList<>();
//sort meetings by date
List<UpcomingGuestsList.Meeting> meetings = response.meetings;
Collections.sort(meetings, newComparator<UpcomingGuestsList.Meeting>() {
@Overridepublicintcompare(UpcomingGuestsList.Meeting meeting, UpcomingGuestsList.Meeting t1) {
return meeting.getDateStart().compareTo(t1.getDateStart());
}
});
for (UpcomingGuestsList.Meeting meeting: meetings) {
//sort visitors by last name
List<UpcomingGuestsList.Visitor> visitors = meeting.visitors;
Collections.sort(visitors, newComparator<UpcomingGuestsList.Visitor>() {
@Overridepublicintcompare(UpcomingGuestsList.Visitor visitor, UpcomingGuestsList.Visitor t1) {
return visitor.getLastName().compareTo(t1.getLastName());
}
});
for(UpcomingGuestsList.Visitor visitor: visitors){
upcomingGuests.add(newUpcomingGuest(visitor,meeting));
}
}
// send upcomingGuests results to view
}
Post a Comment for "How Do I Retrieve Data Independently From Nested Json Objects That Are Part Of The Same Group In Android/java? ( More Clarity/details In Body)"