Skip to content Skip to sidebar Skip to footer

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)"