简体   繁体   中英

ListView is not showing all JSON data using Retrofit

I'm trying to get all the JSON result into my listview. I have successfully retrieved the data but it keeps only shows one data (example if JNE, only showing OKE result). I'm using Retrofit. Below is the example JSON data from the documentation that I want to show all in my listview. Please help me why it is not showing all the result. Thank you.

{
 "rajaongkir":{
  "query":{
     "origin":"501",
     "destination":"114",
     "weight":1700,
     "courier":"jne"
  },
  "status":{
     "code":200,
     "description":"OK"
  },
  "origin_details":{
     "city_id":"501",
     "province_id":"5",
     "province":"DI Yogyakarta",
     "type":"Kota",
     "city_name":"Yogyakarta",
     "postal_code":"55000"
  },
  "destination_details":{
     "city_id":"114",
     "province_id":"1",
     "province":"Bali",
     "type":"Kota",
     "city_name":"Denpasar",
     "postal_code":"80000"
  },
  "results":[
     {
        "code":"jne",
        "name":"Jalur Nugraha Ekakurir (JNE)",
        "costs":[
           {
              "service":"OKE",
              "description":"Ongkos Kirim Ekonomis",
              "cost":[
                 {
                    "value":38000,
                    "etd":"4-5",
                    "note":""
                 }
              ]
           },
           {
              "service":"REG",
              "description":"Layanan Reguler",
              "cost":[
                 {
                    "value":44000,
                    "etd":"2-3",
                    "note":""
                 }
              ]
           },
           {
              "service":"SPS",
              "description":"Super Speed",
              "cost":[
                 {
                    "value":349000,
                    "etd":"",
                    "note":""
                 }
              ]
           },
           {
              "service":"YES",
              "description":"Yakin Esok Sampai",
              "cost":[
                 {
                    "value":98000,
                    "etd":"1-1",
                    "note":""
                 }
              ]
           }
        ]
     }
    ]
    }
    }

My Call

public void getCoast(String origin,
                     String destination,
                     String weight,
                     String courier) {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ApiUrl.URL_ROOT_HTTPS)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    ApiService service = retrofit.create(ApiService.class);
    Call<ItemCost> call = service.getCost(
            "c5333cdcc37b3511c909088d99587fd8",
            origin,
            destination,
            weight,
            courier
    );


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

            Log.v("wow", "json : " + new Gson().toJson(response));
            progressDialog.dismiss();

            if (response.isSuccessful()) {

                int statusCode = response.body().getRajaongkir().getStatus().getCode();

                if (statusCode == 200) {
                    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View alertLayout = inflater.inflate(R.layout.custom_results, null);
                    alert = new AlertDialog.Builder(MainActivity.this);
                    alert.setTitle("Result Cost");
                    alert.setMessage("this result your search");
                    alert.setView(alertLayout);
                    alert.setCancelable(true);

                    ad = alert.show();


                    String originCity = response.body().getRajaongkir().getOriginDetails().getCityName();
                    String originPostalCode = response.body().getRajaongkir().getOriginDetails().getPostalCode();
                    String destinationCity = response.body().getRajaongkir().getDestinationDetails().getCityName();
                    String destinationPostalCode = response.body().getRajaongkir().getDestinationDetails().getPostalCode();

                    //results
                    List<com.bagicode.cekongkir.model.cost.Result> ListResults = response.body().getRajaongkir().getResults();

                    //costs
                    List<com.bagicode.cekongkir.model.cost.Cost> ListCosts = response.body().getRajaongkir().getResults().get(0).getCosts();

                   //cost
                   List<com.bagicode.cekongkir.model.cost.Cost_> ListCost = response.body().getRajaongkir().getResults().get(0).getCosts().get(0).getCost();



                    mListView = (ListView) alertLayout.findViewById(R.id.listItem);
                    adapter_results = new ResultsAdapter(MainActivity.this, originCity, originPostalCode, destinationCity, destinationPostalCode, ListResults, ListCosts, ListCost);


                    mListView.setAdapter(adapter_results);
                    mListView.setClickable(true);

                    adapter_results.notifyDataSetChanged();



                } else {

                    String message = response.body().getRajaongkir().getStatus().getDescription();
                    Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
                }

            } else {
                String error = "Error Retrive Data from Server !!!";
                Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onFailure(Call<ItemCost> call, Throwable t) {

            progressDialog.dismiss();
            Toast.makeText(MainActivity.this, "Message : Error " + t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

}

Api Interface

   // Cost
@FormUrlEncoded
@POST("cost")
Call<ItemCost> getCost (@Field("key") String Token,
                        @Field("origin") String origin,
                        @Field("destination") String destination,
                        @Field("weight") String weight,
                        @Field("courier") String courier);

Pojo

ItemCost

public class ItemCost {

@SerializedName("rajaongkir")
@Expose
private Rajaongkir rajaongkir;

public Rajaongkir getRajaongkir() {
    return rajaongkir;
}

public void setRajaongkir(Rajaongkir rajaongkir) {
    this.rajaongkir = rajaongkir;
}

}

rajaOngkir Pojo (List)

public class  Rajaongkir {

@SerializedName("query")
@Expose
private Query query;
@SerializedName("status")
@Expose
private Status status;
@SerializedName("origin_details")
@Expose
private OriginDetails originDetails;
@SerializedName("destination_details")
@Expose
private DestinationDetails destinationDetails;
@SerializedName("results")
@Expose
private List<Result> results = null;

public Query getQuery() {
    return query;
}

public void setQuery(Query query) {
    this.query = query;
}

public Status getStatus() {
    return status;
}

public void setStatus(Status status) {
    this.status = status;
}

public OriginDetails getOriginDetails() {
    return originDetails;
}

public void setOriginDetails(OriginDetails originDetails) {
    this.originDetails = originDetails;
}

public DestinationDetails getDestinationDetails() {
    return destinationDetails;
}

public void setDestinationDetails(DestinationDetails destinationDetails) {
    this.destinationDetails = destinationDetails;
}

public List<Result> getResults() {
    return results;
}

public void setResults(List<Result> results) {
    this.results = results;
}

}

Results List Pojo

public class Result {

@SerializedName("code")
@Expose
private String code;
@SerializedName("name")
@Expose
private String name;
@SerializedName("costs")
@Expose
private List<Cost> costs = null;

public Result(String code, String name, List<Cost> costs) {
    this.code = code;
    this.name = name;
    this.costs = costs;
}

public Result(String code, String name) {
    this.code = code;
    this.name = name;
}

public String getCode() {
    return code;
}

public void setCode(String code) {
    this.code = code;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public List<Cost> getCosts() {
    return costs;
}

public void setCosts(List<Cost> costs) {
    this.costs = costs;
}

}

Costs List Pojo

public class Cost {

@SerializedName("service")
@Expose
private String service;
@SerializedName("description")
@Expose
private String description;
@SerializedName("cost")
@Expose
private List<Cost_> cost = null;


public Cost(String service, String description) {
    this.service = service;
    this.description = description;
}

public String getService() {
    return service;
}

public void setService(String service) {
    this.service = service;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}

public List<Cost_> getCost() {
    return cost;
}

public void setCost(List<Cost_> cost) {
    this.cost = cost;
}

}

cost list Pojo

public class Cost_ {

@SerializedName("value")
@Expose
private Integer value;
@SerializedName("etd")
@Expose
private String etd;
@SerializedName("note")
@Expose
private String note;


public Cost_(Integer value, String etd, String note) {
    this.value = value;
    this.etd = etd;
    this.note = note;
}

public Integer getValue() {
    return value;
}

public void setValue(Integer value) {
    this.value = value;
}

public String getEtd() {
    return etd;
}

public void setEtd(String etd) {
    this.etd = etd;
}

public String getNote() {
    return note;
}

public void setNote(String note) {
    this.note = note;
}

}

ListView Adapter

public class ResultsAdapter extends BaseAdapter {
private Activity activity;
private LayoutInflater inflater;

private List<Result> resulsItems;
private List<Cost> costsItems;
private List<Cost_> costItems;


TextView tv_origin, tv_destination, tv_expedisi, tv_coast, tv_time;


private String originCity, destinationCity, originPostalCode, destinationPostalCode;


public ResultsAdapter(MainActivity mainActivity, String originCity, String originPostalCode, String destinationCity, String destinationPostalCode, List<Result> listResults, List<Cost> listCosts, List<Cost_> listCost) {

    this.activity = mainActivity;
  this.originCity = originCity;
  this.originPostalCode = originPostalCode;
  this.destinationCity = destinationCity;
  this.destinationPostalCode = destinationPostalCode;
    this.resulsItems = listResults;
    this.costsItems = listCosts;
    this.costItems = listCost;

}


@Override
public int getCount() {
    return resulsItems.size();
}

@Override
public Object getItem(int location) {
    return resulsItems.get(location);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int i, View convertView, ViewGroup parent) {

    if (inflater == null)
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null)
        convertView = inflater.inflate(R.layout.item_results, null);

    tv_origin = (TextView) convertView.findViewById(R.id.tv_origin);
    tv_destination = (TextView) convertView.findViewById(R.id.tv_destination);
    tv_expedisi = convertView.findViewById(R.id.tv_expedisi);
    tv_coast = convertView.findViewById(R.id.tv_coast);
    tv_time = convertView.findViewById(R.id.tv_time);


    results = resulsItems.get(i);
    costs = costsItems.get(i);
    cost = costItems.get(i);


    tv_origin.setText(originCity);
    tv_destination.setText(destinationCity);
    tv_expedisi.setText(results.getName());
    tv_coast.setText(String.valueOf(cost.getValue()));
    tv_time.setText(cost.getEtd());



    return convertView;
}

}

ACtual Response Log

{"body":{"rajaongkir":{"destination_details":{"city_id":"114","city_name":"Denpasar","postal_code":"80227","province":"Bali","province_id":"1","type":"Kota"},"origin_details":{"city_id":"501","city_name":"Yogyakarta","postal_code":"55111","province":"DI Yogyakarta","province_id":"5","type":"Kota"},"query":{"courier":"jne","destination":"114","key":"c5333cdcc37b3511c909088d99587fd8","origin":"501","weight":1000},"results":[{"code":"jne","costs":[{"cost":[{"etd":"4-5","note":"","value":26000}],"description":"Ongkos Kirim Ekonomis","service":"OKE"},{"cost":[{"etd":"2-3","note":"","value":28000}],"description":"Layanan Reguler","service":"REG"},{"cost":[{"etd":"1-1","note":"","value":43000}],"description":"Yakin Esok Sampai","service":"YES"}],"name":"Jalur Nugraha Ekakurir (JNE)"}],"status":{"code":200,"description":"OK"}}},"rawResponse":{"body":{"contentLength":823,"contentType":{"mediaType":"application/json","subtype":"json","type":"application"}},"code":200,"handshake":{"cipherSuite":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","localCertificates":[],"peerCertificates":[{"hash":-1,"type":"X.509"},{"hash":-1,"type":"X.509"}],"tlsVersion":"TLS_1_2"},"headers":{"namesAndValues":["Date","Thu, 02 May 2019 13:09:21 GMT","Server","Apache/2.4.7 (Ubuntu)","Content-Length","823","Keep-Alive","timeout\u003d15, max\u003d100","Connection","Keep-Alive","Content-Type","application/json"]},"message":"OK","networkResponse":{"code":200,"handshake":{"cipherSuite":"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256","localCertificates":[],"peerCertificates":[{"hash":-1,"type":"X.509"},{"hash":-1,"type":"X.509"}],"tlsVersion":"TLS_1_2"},"headers":{"namesAndValues":["Date","Thu, 02 May 2019 13:09:21 GMT","Server","Apache/2.4.7 (Ubuntu)","Content-Length","823","Keep-Alive","timeout\u003d15, max\u003d100","Connection","Keep-Alive","Content-Type","application/json"]},"message":"OK","protocol":"HTTP_1_1","receivedResponseAtMillis":1556802600578,"request":{"body":{"encodedNames":["key","origin","destination","weight","courier"],"encodedValues":["c5333cdcc37b3511c909088d99587fd8","501","114","1000","jne"]},"cacheControl":{"isPrivate":false,"isPublic":false,"maxAgeSeconds":-1,"maxStaleSeconds":-1,"minFreshSeconds":-1,"mustRevalidate":false,"noCache":false,"noStore":false,"noTransform":false,"onlyIfCached":false,"sMaxAgeSeconds":-1},"headers":{"namesAndValues":["Content-Type","application/x-www-form-urlencoded","Content-Length","87","Host","api.rajaongkir.com","Connection","Keep-Alive","Accept-Encoding","gzip","User-Agent","okhttp/3.3.0"]},"method":"POST","tag":{"body":{"encodedNames":["key","origin","destination","weight","courier"],"encodedValues":["c5333cdcc37b3511c909088d99587fd8","501","114","1000","jne"]},"headers":{"namesAndValues":[]},"method":"POST","url":{"host":"api.rajaongkir.com","password":"","pathSegments":["starter","cost"],"port":443,"scheme":"https","url":"https://api.rajaongkir.com/starter/cost","username":""}},"url":{"host":"api.rajaongkir.com","password":"","pathSegments":["starter","cost"],"port":443,"scheme":"https","url":"https://api.rajaongkir.com/starter/cost","username":""}},"sentRequestAtMillis":1556802600415},"protocol":"HTTP_1_1","receivedResponseAtMillis":1556802600578,"request":{"body":{"encodedNames":["key","origin","destination","weight","courier"],"encodedValues":["c5333cdcc37b3511c909088d99587fd8","501","114","1000","jne"]},"headers":{"namesAndValues":["Content-Type","application/x-www-form-urlencoded","Content-Length","87"]},"method":"POST","tag":{"body":{"encodedNames":["key","origin","destination","weight","courier"],"encodedValues":["c5333cdcc37b3511c909088d99587fd8","501","114","1000","jne"]},"headers":{"namesAndValues":[]},"method":"POST","url":{"host":"api.rajaongkir.com","password":"","pathSegments":["starter","cost"],"port":443,"scheme":"https","url":"https://api.rajaongkir.com/starter/cost","username":""}},"url":{"host":"api.rajaongkir.com","password":"","pathSegments":["starter","cost"],"port":443,"scheme":"https","url":"https://api.rajaongkir.com/starter/cost","username":""}},"sentRequestAtMillis":1556802600415}}
public void getCoast(String origin,
                     String destination,
                     String weight,
                     String courier) {

    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(ApiUrl.URL_ROOT_HTTPS)
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    ApiService service = retrofit.create(ApiService.class);
    Call<ItemCost> call = service.getCost(
            "c5333cdcc37b3511c909088d99587fd8",
            origin,
            destination,
            weight,
            courier
    );


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

            Log.v("wow", "json : " + new Gson().toJson(response));
            progressDialog.dismiss();

            if (response.isSuccessful()) {

                int statusCode = response.body().getRajaongkir().getStatus().getCode();

                if (statusCode == 200) {
                    LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                    View alertLayout = inflater.inflate(R.layout.custom_results, null);
                    alert = new AlertDialog.Builder(MainActivity.this);
                    alert.setTitle("Result Cost");
                    alert.setMessage("this result your search");
                    alert.setView(alertLayout);
                    alert.setCancelable(true);

                    ad = alert.show();


                    String originCity = response.body().getRajaongkir().getOriginDetails().getCityName();
                    String originPostalCode = response.body().getRajaongkir().getOriginDetails().getPostalCode();
                    String destinationCity = response.body().getRajaongkir().getDestinationDetails().getCityName();
                    String destinationPostalCode = response.body().getRajaongkir().getDestinationDetails().getPostalCode();

                    //results
                    List<com.bagicode.cekongkir.model.cost.Result> ListResults = response.body().getRajaongkir().getResults();

                    //costs
                    List<com.bagicode.cekongkir.model.cost.Cost> ListCosts = response.body().getRajaongkir().getResults().get(0).getCosts();

                   //cost
                   List<com.bagicode.cekongkir.model.cost.Cost_> ListCost = response.body().getRajaongkir().getResults().get(0).getCosts().get(0).getCost();



                    mListView = (ListView) alertLayout.findViewById(R.id.listItem);
                    adapter_results = new ResultsAdapter(MainActivity.this, originCity, originPostalCode, destinationCity, destinationPostalCode, ListResults, ListCosts, ListCost);


                    mListView.setAdapter(adapter_results);
                    mListView.setClickable(true);

                    adapter_results.notifyDataSetChanged();



                } else {

                    String message = response.body().getRajaongkir().getStatus().getDescription();
                    Toast.makeText(MainActivity.this, message, Toast.LENGTH_SHORT).show();
                }

            } else {
                String error = "Error Retrive Data from Server !!!";
                Toast.makeText(MainActivity.this, error, Toast.LENGTH_SHORT).show();
            }

        }

        @Override
        public void onFailure(Call<ItemCost> call, Throwable t) {

            progressDialog.dismiss();
            Toast.makeText(MainActivity.this, "Message : Error " + t.getMessage(), Toast.LENGTH_SHORT).show();
        }
    });

}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM