Представление хэш-карты в виде списка

Я анализирую некоторые данные JSON ключ грузовика (id) и имя (значение). Я помещаю его в HashMap, и я хочу отобразить только значение в ListView.

Однако я продолжаю получать эту ошибку

HashMap нельзя привести к java.util.Карта$Запись

на этой линии: return (Map.Entry) mArrayList.get(position);в моем Truckkadapter.

Кто-нибудь видит, что я делаю неправильно?

Вот мясо разбора JSON, добавления его в ArrayList, а затем создания экземпляра адаптера listview.

private List<HashMap<String, String>>  listTrucks = new ArrayList<HashMap<String, String>>();

    for (int i = 0; i < arrayRecordSet.length(); i++) {
        record = arrayRecordSet.getJSONObject(i);
        map = new HashMap<>();
        map.put("MYKEY", record.getString("SOME TRUCK KEY"));
        map.put("MYVALUE", record.getString("SOME TRUCK VALUE"));

    listTrucks.add(map);
    }

    TruckAdapter truckAdapter = new TruckAdapter(listTrucks);
    lv.setAdapter(truckAdapter);

Мой Класс Адаптера

public class TruckAdapter extends BaseAdapter {

        private final ArrayList mArrayList;

        public TruckAdapter(ArrayList<HashMap<String, String>> map){
            mArrayList = map;

        }

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

        @Override
        public Map.Entry<String, String> getItem(int position) {
            return (Map.Entry) mArrayList.get(position);
        }

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

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            final View result;

            if (convertView == null) {
                result = LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
            } else {
                result = convertView;
            }

            Map.Entry<String, String> item = getItem(position);

            ((TextView) result.findViewById(R.id.text1)).setText(item.getValue());


            return result;
        }
    }

формат JSON

[{"TRKlTruckKey":"1","TRKch10TruckNumber":"Ford"},{"TRKlTruckKey":"2","TRKch10TruckNumber":"Jeep"} ......

2 ответа

  1. Вы определяете anArrayList<HashMap<String, String>>, но вы пытаетесь получить Map.Entry<String, String>getItemметод from. Ваш список должен бытьArrayList<Map.Entry<String, String>>, и исправить метод загрузки:

    Map.Entry<String, String> map;
    for (int i = 0; i < arrayRecordSet.length(); i++) {
        record = arrayRecordSet.getJSONObject(i);
        map = new AbstractMap.SimpleEntry<String, String>(record.getString("SOME TRUCK KEY"), record.getString("SOME TRUCK VALUE"));
        listTrucks.add(map);
    }
    

    Но, это может быть очень легко создать POJO грузовика:

    Класс Грузовика

    public class Truck {
        private String TRKlTruckKey; //+getters/+setters
        private String TRKch10TruckNumber; //+getters/+setters
    
        public Truck(String TRKlTruckKey, String TRKch10TruckNumber) {
            ...
        }
    }
    

    Способ Загрузки

    for (int i = 0; i < arrayRecordSet.length(); i++) {
        record = arrayRecordSet.getJSONObject(i);
        listTrucks.add(new Truck(record.getString("SOME TRUCK KEY", record.getString("SOME TRUCK VALUE")));
    }
    

    Способ Переплавки

    @Override
    public Map.Entry<String, String> getItem(int position) {
        Truck truck = listTrucks.get(position);
        return new AbstractMap.SimpleEntry<String, String>(truck.getTRKlTruckKey, truck.getTRKch10TruckNumber);
    }
    
  2. Создайте класс с именем Truck.

    for (int i = 0; i < arrayRecordSet.length(); i++) {
        record = arrayRecordSet.getJSONObject(i);
        Truck truck = new Truck();
        truck.setKey(record.getString("TRKlTruckKey"));
        truck.setNumber(record.getString("TRKch10TruckNumber"));
    
        listTrucks.add(truck);
    }
    

    Затем конструктор адаптера:

    public TruckAdapter(ArrayList<Truck> trucks){
        mArrayList = trucks;
    }
    

    И ваш метод getItem() :

    @Override
    public Truck getItem(int position) {
        return mArrayList.get(position);
    }