在listView上显示hashmap



我正在解析一些JSON数据卡车密钥(ID)和名称(value)。我将其放在哈希图中,我想在 ListView中显示 value

但是,我不断遇到此错误

Hashmap不能施放到java.util.map $ entry

在这条线上:return (Map.Entry) mArrayList.get(position);在我的Truckadapter中。

任何人都可以看到我在做什么错了吗?

这是解析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"} ......

您正在定义ArrayList<HashMap<String, String>>,但是您正在尝试从getItem方法获得Map.Entry<String, String>。您的列表应为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);
}

创建一个名为 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);
}

最新更新