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

时间:2019-05-02 11:44:10

标签: java android listview retrofit

我正在尝试将所有JSON结果放入我的列表视图中。我已经成功检索了数据,但它仅显示一个数据(例如,如果是JNE,则仅显示OKE结果)。我正在使用翻新。以下是我想在列表视图中全部显示的文档中的示例JSON数据。请帮助我为什么它不能显示所有结果。谢谢。

{
 "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":""
                 }
              ]
           }
        ]
     }
    ]
    }
    }

我的电话

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接口

   // 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(列表)

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;
}

}

结果列表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;
}

}

成本列表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;
}

}

费用清单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适配器

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;
}

}

实时响应日志

{"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}}

1 个答案:

答案 0 :(得分:0)

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();
        }
    });

}