简体   繁体   English

ListView 未使用 Retrofit 显示所有 JSON 数据

[英]ListView is not showing all JSON data using Retrofit

I'm trying to get all the JSON result into my listview.我正在尝试将所有 JSON 结果放入我的列表视图中。 I have successfully retrieved the data but it keeps only shows one data (example if JNE, only showing OKE result).我已经成功检索到数据,但它只显示一个数据(例如 JNE,只显示 OKE 结果)。 I'm using Retrofit.我正在使用改造。 Below is the example JSON data from the documentation that I want to show all in my listview.下面是我想在列表视图中全部显示的文档中的示例 JSON 数据。 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) rajaOngkir Pojo(列表)

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结果列表 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成本清单 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成本清单 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();
        }
    });

}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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