0

Error while fetching the data from api using retrofit This is my data in json format I am confusing how to fetch the nested array /object data using retrofit

 [
  {
    "state": "Kerala",
    "districtData": [
      {
        "district": "Thrissur",
        "confirmed": 12,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      },
      {
        "district": "Alappuzha",
        "confirmed": 3,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      },
      {
        "district": "Kasaragod",
        "confirmed": 156,
        "lastupdatedtime": "",
        "delta": {
          "confirmed": 0
        }
      },
    ]
  }
]


    My Resopnse Class:--
public class StateDistrictResponse
{
    private String state;
    private DistrictDataModal[] districtData;

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    public DistrictDataModal[] getDistrictData() {
        return districtData;
    }

    public void setDistrictData(DistrictDataModal[] districtData) {
        this.districtData = districtData;
    }

    public StateDistrictResponse(String state, DistrictDataModal[] districtData) {
        this.state = state;
        this.districtData = districtData;
    }
}

POJO CLASS/MODal CLass of DistrictDataModal::-

 public class DistrictDataModal
    {
        private String district;
        private String confirmed;
        private String lastupdatedtime;
        private DeltaModal delta;

        public String getDistrict() {
            return district;
        }

        public void setDistrict(String district) {
            this.district = district;
        }

        public String getConfirmed() {
            return confirmed;
        }

        public void setConfirmed(String confirmed) {
            this.confirmed = confirmed;
        }

        public String getLastupdatedtime() {
            return lastupdatedtime;
        }

        public void setLastupdatedtime(String lastupdatedtime) {
            this.lastupdatedtime = lastupdatedtime;
        }

        public DeltaModal getDelta() {
            return delta;
        }

        public void setDelta(DeltaModal delta) {
            this.delta = delta;
        }

        public DistrictDataModal(String district, String confirmed, String lastupdatedtime, DeltaModal delta) {
            this.district = district;
            this.confirmed = confirmed;
            this.lastupdatedtime = lastupdatedtime;
            this.delta = delta;
        }
    }

and here my object class Delta

 public class DeltaModal
    {
        private String confirmed;

        public String getConfirmed() {
            return confirmed;
        }

        public void setConfirmed(String confirmed) {
            this.confirmed = confirmed;
        }

        public DeltaModal(String confirmed) {
            this.confirmed = confirmed;
        }
    }

and here retrofit code and i didnt get it how to fetch the data of object :-

private void getStateDistrict()
    {

        Retrofit retrofit= new Retrofit.Builder()
                .baseUrl(Apis.ROOT)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
        Apis request=retrofit.create(Apis.class);

        Call<StateDistrictResponse> call=request.getState_Distric_Wise();

        call.enqueue(new Callback<StateDistrictResponse>() {
            @Override
            public void onResponse(Call<StateDistrictResponse> call, Response<StateDistrictResponse> response) {



                if (response.isSuccessful())
                {
                    try {
                        StateDistrictResponse response1=response.body();

                        Toast.makeText(StateDistrict.this, ""+response1.getDistrictData()[i].getDelta().getConfirmed(), Toast.LENGTH_SHORT).show();

                    }
                    catch (Exception e)
                    {
                        Toast.makeText(StateDistrict.this, "Ex:--"+e.toString(), Toast.LENGTH_LONG).show();
                    }

                }
                else
                {
                    Toast.makeText(StateDistrict.this, "SOrry", Toast.LENGTH_SHORT).show();
                }
            }

            @Override
            public void onFailure(Call<StateDistrictResponse> call, Throwable t) {
                Toast.makeText(StateDistrict.this, "SOrry"+t.toString(), Toast.LENGTH_SHORT).show();

            }
        });
    }

3 Answers3

0

Fo these kinds of complex json. I suggest using this perfect tool that would be able to convert your json to a well -structured POJO. No matter how complex json is.

I hope this help

MustafaKhaled
  • 1,343
  • 9
  • 25
0

In your StateDistrictResponse class this:

private DistrictDataModal[] districtData;

Should be:

private List<DistrictDataModal> districtDate;

and align the POJOs well. Also I noticed that the root object is an array? So make sure to double check that since the json starts with a squared bracket.

Mike
  • 1,313
  • 12
  • 21
0

Might be useful this link:

Click here! This work well.

Community
  • 1
  • 1
Dinesh
  • 1,410
  • 2
  • 16
  • 29